我有一个 csv 文件,如下所示:
aaa,vvv,,,,
bbb,qqq,,,vvv,
ccc,www,iii,,,kkk
ddd,rrr,,,lll,
eee,ttt,ooo,sss,ggg,jjj
fff,yyy,ppp,,,
我想要获取第 n 到第 m 列为空的行(在本例中:获取第 3 到第 4 列为空的行)
然后得到输出如下
bbb,qqq,,,vvv,
ddd,rrr,,,lll,
实际上我只想获取特定范围列为空的行,例如使用 awk
awk -F, '$n-$m=="" {print}' file.csv
awk -F, '$3-$4=="" {print}' file.csv
答案1
单程:
awk -F, -v st=3 -v end=4 '{for(i=st;i<=end;i++){if($i){next;}}}1' file
答案2
@Guru 的解决方案awk
可能比这更便携,但使用grep
for这个具体的例子:
egrep '^[a-z]*,[a-z]*,{3}[a-z]' csv
bbb,qqq,,,vvv,
ddd,rrr,,,lll,
csv
这个文件在哪里:
cat csv
aaa,vvv,,,,
bbb,qqq,,,vvv,
ccc,www,iii,,,kkk
ddd,rrr,,,lll,
eee,ttt,ooo,sss,ggg,jjj
fff,yyy,ppp,,,
grep --version
grep (BSD grep) 2.5.1-FreeBSD