![sed 또는 awk 기반 실행 명령을 사용하여 n 열에서 m 열의 빈 줄을 바꾸는 방법](https://linux55.com/image/102129/sed%20%EB%98%90%EB%8A%94%20awk%20%EA%B8%B0%EB%B0%98%20%EC%8B%A4%ED%96%89%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20n%20%EC%97%B4%EC%97%90%EC%84%9C%20m%20%EC%97%B4%EC%9D%98%20%EB%B9%88%20%EC%A4%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음과 같은 CSV 파일이 있습니다.
site1.com,aaa,bbb,ccc
site2.com,qqq
site3.com,rrr,uuu,ppp
site4.com,ddd,sss
site5.com,www,rrr,yyy,uuu
site6.com,,,,ttt,,,,
site7.com,,,uuuu,,,,ppp,
site8.com,,,,ggg,zzz
n~m열(2~4번째)이 비어있는 행(행)을 교체하고 싶습니다. 나는 명령을 실행하여 이 라인을 조작하고 싶습니다. 예를 들어 awk를 사용하면 다음과 같습니다.
awk -F, '$n-$m=="" {printf "%s,",$1 ; system(cmd1) ;}else {print $0}' test.csv
awk -F, '$2-$4=="" {printf "%s,",$1 ; system(cmd1) ;}else {print $0}' test.csv
그런 다음 다음과 같이 내보내고 싶습니다(output1은 cmd1 명령의 출력입니다).
site1.com,aaa,bbb,ccc
site2.com,qqq
site3.com,rrr,uuu,ppp
site4.com,ddd,sss
site5.com,www,rrr,yyy,uuu
site6.com,output1
site7.com,,,uuuu,,,,ppp,
site8.com,output1
답변1
3개의 열만 필요하므로 다음과 같이 할 수 있습니다.
awk -F, '{
if($2=="" && $3==$2 && $3==$4){
printf "%s,",$1;
system("CMD")
}
else{print}
}' test.csv