如何使用基于 sed 或 awk 的 run 命令替换第 n 到 m 列为空的行

如何使用基于 sed 或 awk 的 run 命令替换第 n 到 m 列为空的行

我有一个 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 

相关内容