Se os campos nunca puderem conter espaço em branco, um campo vazio significa uma guia como primeiro caractere ( ^\t
), uma guia como o último caractere ( \t$
) ou duas guias consecutivas ( \t\t
). Você poderia, portanto, filtrar as linhas contendo qualquer uma delas:
grep -Ev $'^\t|\t\t|\t$' file
Se você pode ter espaço em branco, as coisas ficam mais complexas. Se seus campos puderem começar com espaços, use isso (considera um campo com apenas espaços vazios):
grep -Pv '\t\s*(\t|$)|\t$|^\t' file
A alteração filtra as linhas que correspondem a uma guia, seguida de 0 ou mais espaços e, em seguida, outra guia ou o final da linha.
Isso também falhará se o último campo contiver apenas espaços. Para evitar isso também, use perl
com as opções -F
e -a
para dividir a entrada na matriz @F
, informando para imprimir a menos que um dos campos esteja vazio ( /^$/
):
perl -F'\t' -lane 'print unless grep{/^$/} @F' file