Extraindo linhas que contêm uma frase exata que inclui uma guia

0

Eu tenho um arquivo que contém as seguintes linhas

50[tab]H[tab]1
44[tab]H[tab]2
4[tab]H[tab]3
4[tab]H[tab]4
44[tab]H[tab]5
234[tab]H[tab]6

Eu gostaria de extrair apenas a última linha que começa com a frase exata "4 [tab] H" (então isso seria "4 [tab] H [tab] 4") em outro arquivo. Eu tentei:

grep "^4*.H" filein.in | tail -1 >> fileout.out

mas em vez disso, extrai "44 [tab] H [tab] 5". Eu preciso extrair a última linha que começa com a string exata: "4 [tab] H".

    
por A. B 01.04.2018 / 01:48

3 respostas

4

No ksh93 / zsh / bash / mksh / FreeBSD sh:

grep $'^4\tH' filein.in | tail -n 1

Ou em qualquer shell:

awk '/^4\tH/ { line=$0; }; END { if(line!="") print line; }' filein.in
    
por 01.04.2018 / 01:56
1

Com o gnu sed

sed '/^4\tH/h;$bA;N;D;:A;x;/^$/d' infile
    
por 01.04.2018 / 11:52
0

Você também pode inverter a linha do arquivo de entrada usando tac e depois obter a primeira correspondência

$ # add another \t after H if needed
$ tac ip.txt | grep -m1 $'^4\tH'
4   H   4

$ tac ip.txt | awk -F'\t' '$1=="4" && $2=="H"{print; exit}'
4   H   4
    
por 01.04.2018 / 04:22