如何获取第 n 到 m 列为空的行

如何获取第 n 到 m 列为空的行

我有一个 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可能比这更便携,但使用grepfor这个具体的例子:

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

相关内容