내 base.csv 파일에는 아래에 샘플이있는 여러 항목이 있습니다.
NAME,IP_ADDRESS,PRI_IP,APP_CODE,APP_NAME,OWNER
test2,10.9.7.12/10.222.101.11,10.9.9.12,545,myapp1,owner1
mytest,10.9.7.12,10.9.9.12,545,myapp1,owner9
checkthis,10.9.7.12/10.222.101.11/10.3.2.111,10.9.9.12,545,myapp1,owner7
참고 : 두 번째 열은 항상 구분 기호로 구분 된 단일 또는 다중 IP 주소입니다. /
나는 newbase.csv
항상 하나의 ip만을 갖는 두 번째 컬럼 으로 만들고 싶습니다 .
따라서 원하는 newbase.csv는 다음과 같습니다.
test2,10.9.7.12,10.9.9.12,545,myapp1,owner1
test2,10.222.101.11,10.9.9.12,545,myapp1,owner1
mytest,10.9.7.12,10.9.9.12,545,myapp1,owner9
checkthis,10.9.7.12,10.9.9.12,545,myapp1,owner7
checkthis,10.222.101.11,10.9.9.12,545,myapp1,owner7
checkthis,10.3.2.111,10.9.9.12,545,myapp1,owner7
아래에서는 필요한 열을 제공하지만 두 번째 열에 여러 IP를 포함하는 행을 여러 행으로 분할하지는 않습니다.
cat -- base.csv | cut -d, -f2-5 > newbase.csv
제안 해 주시겠습니까?
Miller 중첩 함수를 사용하여 레코드간에 값 을 분해 할 수 있습니다 .
$ mlr --csv nest --explode --values --across-records --nested-fs '/' -f IP_ADDRESS base.csv
NAME,IP_ADDRESS,PRI_IP,APP_CODE,APP_NAME,OWNER
test2,10.9.7.12,10.9.9.12,545,myapp1,owner1
test2,10.222.101.11,10.9.9.12,545,myapp1,owner1
mytest,10.9.7.12,10.9.9.12,545,myapp1,owner9
checkthis,10.9.7.12,10.9.9.12,545,myapp1,owner7
checkthis,10.222.101.11,10.9.9.12,545,myapp1,owner7
checkthis,10.3.2.111,10.9.9.12,545,myapp1,owner7
최신 버전에서는 이렇게 --explode --values --across-records --nested-fs '/'
축약 될 수 있습니다.--evar '/'
mlr --csv nest --evar '/' -f IP_ADDRESS base.csv >newbase.csv
또는 awk로 :
awk -F, '
BEGIN{OFS=FS}
{
n = split($2,a,"/")
for(i=1;i<=n;i++) {
$2=a[i]; print
}
}
' base.csv >newbase.csv
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다