![如何使用基于 sed 或 awk 的 run 命令替换第 n 到 m 列为空的行](https://linux22.com/image/102129/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%9F%BA%E4%BA%8E%20sed%20%E6%88%96%20awk%20%E7%9A%84%20run%20%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E7%AC%AC%20n%20%E5%88%B0%20m%20%E5%88%97%E4%B8%BA%E7%A9%BA%E7%9A%84%E8%A1%8C.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