Se você deseja manter linhas com dados em pelo menos dois campos:
grep '[^,].*,[^,]'
Eu tenho um arquivo de texto e estou tentando descobrir como filtrar todas as linhas com dados em apenas 1 campo, deixando linhas com 2 campos. Eu me deparei com o seguinte código: awk '$NF > 1'
, mas não consigo fazer funcionar como eu quero. Alguma idéia do que eu posso estar fazendo errado?
Aqui está uma amostra dos meus dados:
simpledaddy11,EastOfBrussels
simpledaddy11,thomaswatkins
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11
Moral_Animal,EastOfBrussels
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal
skilur_ua,EastOfBrussels
skilur_ua,thomaswatkins
skilur_ua,
skilur_ua,
skilur_ua,
skilur_ua,
Aqui está o que eu quero terminar:
simpledaddy11,EastOfBrussels
simpledaddy11,thomaswatkins
Moral_Animal,EastOfBrussels
skilur_ua,EastOfBrussels
skilur_ua,thomaswatkins
Obrigado pela ajuda!
Se você deseja manter linhas com dados em pelo menos dois campos:
grep '[^,].*,[^,]'
Você precisa alterar o separador de campo para uma vírgula. Além disso, você não deve ter um $
antes do NF
, se desejar o número de campos ( $NF
é o último campo). Finalmente, as linhas que terminam em vírgula são consideradas como tendo um segundo campo vazio, portanto, você deve excluir as linhas em que o último campo está em branco:
awk -F, 'NF>1 && $NF!=""'
Do comentário de Stephane, eu obviamente não estava lendo a pergunta corretamente. O awk
para imprimir linhas contendo mais de um campo não vazio é mais complicado:
awk -F, '{ nonblank=0;
for(i=1;i<=NF;i++){
if($i!="") nonblank++
}
if(nonblank>1) print $0
}'
Para este propósito, a abordagem grep de Stephane é muito melhor.
você deve:
defina a vírgula como um "Separador de campos padrão",
Pergunta se Número de campos for maior que 1 e se o campo número 2 tiver conteúdo.
Imprima a linha completa (registrador) usando a variável $ 0.
Seus dados são armazenados no arquivo: data-exercise.txt
Este é o código:
awk 'BEGIN{FS=",";}{if(NF>1 && $2!="") print $0;}' data-exercise.txt
Tags awk