onefish
onechicken
twofish
twochicken
twocows
threechicken
「2」を含む行をgrepしたいが、2番目の一致のみが必要な場合はどうなりますか。だから私は結果「twochicken」が欲しいです。
onefish
onechicken
twofish
twochicken
twocows
threechicken
「2」を含む行をgrepしたいが、2番目の一致のみが必要な場合はどうなりますか。だから私は結果「twochicken」が欲しいです。
grep -m2 "two" in-file.txt | tail -n1
2 番目の一致の後で停止し、2 番目の行を出力します。
これを試して:
awk '/two/{i++}i==2' file
あなたのデータで:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
注: ファイルが巨大な場合は、次のようにします。
awk '/two/{i++}i==2{print; exit}' file
grep と sed を使用して、行番号をフィルタリングできます。
テストファイル:
onefish
onechicken
twofish
twochicken
threechicken
twocows
目的の行を取得する:
grep "two" testfile | sed -n 2p
prints "twochicken"
grep "two" testfile | sed -n 1p
prints "twofish"
単語 (ここでは word==two) が 1 行で複数回繰り返され、その行を印刷したい場合は、以下を使用します。
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
たとえば、以下の入力の場合:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
twotwofish
の代わりに が出力されtwochicken
ます。
これは user1787038 が望むものではないかもしれませんが、私自身のコメントに答えるために追加されました。
threechicken
行とtwocows
行が入れ替わった場合、別名:
onefish
onechicken
twofish
twochicken
threechicken
twocows
次に、Kent の最初の応答 ( awk '/two/{i++}i==2' file
) により、次の出力が生成されます。
twochicken
threechicken
カウンターをインクリメントするには、別の一致が発生する必要があるためです。彼の最後の応答:awk '/two/{i++}i==2{print; exit}' file
この問題を回避します。