Linuxコマンドを使用して、テキストファイル内の文字列の最後の出現を見つけたい. 例えば
1 a 1
2 a 2
3 a 3
1 b 1
2 b 2
3 b 3
1 c 1
2 c 2
3 c 3
このようなテキスト ファイルで、b の最後の出現の行番号 6 を見つけたいと思います。最初の出現を見つけることができます
awk '/ b / {print NR;exit}' textFile.txt
しかし、最後の発生に対してそれを行う方法がわかりません。
Linuxコマンドを使用して、テキストファイル内の文字列の最後の出現を見つけたい. 例えば
1 a 1
2 a 2
3 a 3
1 b 1
2 b 2
3 b 3
1 c 1
2 c 2
3 c 3
このようなテキスト ファイルで、b の最後の出現の行番号 6 を見つけたいと思います。最初の出現を見つけることができます
awk '/ b / {print NR;exit}' textFile.txt
しかし、最後の発生に対してそれを行う方法がわかりません。
cat -n textfile.txt | grep " b " | tail -1 | cut -f 1
cat -n
ファイルを STDOUT の先頭に行番号を付けて出力します。grep
"b" を含むすべての行を grep します (より高度なパターンには egrep を使用し、固定文字列のより高速な grep には fgrep を使用できます)。tail -1
「b」を含む行の最後の行を出力しますcut -f 1
からの行番号である最初の列を出力しますcat -n
または、必要に応じて Perl を使用することもできます (これは awk で行うことと非常に似ていますが、率直に言って、Perl が手元にあれば個人的に awk を使用することはありません。Perl は awk でできることの 100% を設計上サポートしています)。 、ワンライナーとして - YMMV):
perl -ne '{$n=$. if / b /} END {print "$n\n"}' textfile.txt
これは機能します:
$ awk '{if ($2~"b") a=NR} END{print a}' your_file
1 つおきのファイルが「b」であることを確認し、行数を記録します。追加されているため、ファイルの読み取りが完了するまでに、最後のファイルになります。
テスト:
$ awk '{if ($2~"b") a=NR} END{print a}' your_file
6
sudo_O advisorに基づく更新:
$ awk '{if ($2=="b") a=NR} END{print a}' your_file
2番目のフィールドにいくつか含まれないようにabc
します。
これも有効です(短く、私が考えたものであるため、上記のものを保持します:D):
$ awk '$2=="b" {a=NR} END{print a}' your_file
$2 が常にグループ化されている場合の別のアプローチ (最後まで待機するよりも効率的である可能性があります):
awk 'NR==1||$2=="b",$2=="b"{next} {print NR-1; exit}' file
また
awk '$2=="b"{f=1} f==1 && $2!="b" {print NR-1; exit}' file