Um caminho:
awk -F, -v st=3 -v end=4 '{for(i=st;i<=end;i++){if($i){next;}}}1' file
Eu tenho um arquivo csv com esta aparência:
aaa,vvv,,,,
bbb,qqq,,,vvv,
ccc,www,iii,,,kkk
ddd,rrr,,,lll,
eee,ttt,ooo,sss,ggg,jjj
fff,yyy,ppp,,,
Eu quero obter as linhas que as colunas de enésima a més estão vazias (neste exemplo: obter linhas de 3 a 4 estão vazias)
e, em seguida, obter a saída da seguinte forma
bbb,qqq,,,vvv,
ddd,rrr,,,lll,
Na verdade, quero obter apenas as linhas que as colunas de intervalo específico estão vazias por exemplo com o awk
awk -F, '$n-$m=="" {print}' file.csv
awk -F, '$3-$4=="" {print}' file.csv
Um caminho:
awk -F, -v st=3 -v end=4 '{for(i=st;i<=end;i++){if($i){next;}}}1' file
A solução awk
de @Guru é provavelmente muito mais portátil do que isso, mas usando grep
para este exemplo específico :
egrep '^[a-z]*,[a-z]*,{3}[a-z]' csv
bbb,qqq,,,vvv,
ddd,rrr,,,lll,
Onde csv
é este arquivo:
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
Tags text-processing awk