Outra abordagem awk
:
awk -F\| '$NF ~ /^apple$/' infile.txt >toOutput.txt
Eu tenho um sometextfile.txt com '|' como delimitador.
Eu gostaria de grep
do valor da última coluna que consiste apenas na palavra "apple". Como faço isso?
column1|column2|column3|column4|column5|column6|column7
aaaaaaa|bbbbbbb|ccccccc|ddddddd|eeeeeee|fffffff|apple
e grep toda a linha para um Newfile.txt
awk -F'|' '$NF == "apple" {print}' sometextfile.txt > Newfile.txt
Usando |
como o separador de campo, para cada linha de sometextfile.txt
se o último campo ( $NF
) for igual a "apple", imprima a linha inteira. Redirecionar a saída para Newfile.txt
Se você deseja testar uma coluna específica em vez da última, use $n
, em que n é o número da coluna. Neste exemplo, $NF
é equivalente a $7
e $6
conteria fffffff
A solução correta é ancorar sua expressão no final com um $
:
grep "|apple$" sometextfile.txt > Newfile.txt
Se isso não encontrar as linhas, o motivo típico é um arquivo de texto formatado em DOS com retornos de carro à direita nos finais de linha. Você pode pegar esse caso permitindo caracteres não imprimíveis no final (supondo que seu suporte de regex \s
):
grep "|apple\s*$" sometextfile.txt > Newfile.txt
A pergunta original pedia uma solução grep
. Para encontrar a última coluna, procure por uma palavra que não tenha o delimitador [^|]+
para frente até o final de linha $
:
grep -Eo "[^|]+$" infile.txt
Saída:
column7
apple