Como grep apenas na última coluna?

0

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

    
por user6308605 02.08.2017 / 07:19

4 respostas

0

Outra abordagem awk :

awk -F\| '$NF ~ /^apple$/' infile.txt >toOutput.txt
    
por 02.08.2017 / 07:55
2
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

    
por 02.08.2017 / 07:23
1

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
    
por 02.08.2017 / 07:51
0

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
    
por 02.08.2017 / 08:08