次の行を含むファイルがあります
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
正確なフレーズ「4 [tab] H」(したがって「4 [tab] H [tab] 4」となる)で始まる最後の行だけを別のファイルに抽出したいと思います。私は試した:
grep "^4*.H" filein.in | tail -1 >> fileout.out
しかし、「44[tab]H[tab]5」を抽出します。正確な文字列「4 [tab] H」で始まる最後の行を抽出するには、この情報が必要です。
答え1
ksh93/zsh/bash/mksh/FreeBSD shから:
grep $'^4\tH' filein.in | tail -n 1
またはどんなシェルでも:
awk '/^4\tH/ { line=$0; }; END { if(line!="") print line; }' filein.in
答え2
GNU sedの使用
sed '/^4\tH/h;$bA;N;D;:A;x;/^$/d' infile
答え3
tac
次のように入力ファイルを1行ずつ元に戻すこともできます。
$ # 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