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おそらくこれよりも移植性が高いですが、grep次の目的に使用されます。この特定例:

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

関連情報