特定の「n」(2番目)の列値を持つ行のファイルから「m」(1番目の)列の値を抽出します。

特定の「n」(2番目)の列値を持つ行のファイルから「m」(1番目の)列の値を抽出します。

awk次の表の行の識別番号のみを返すコマンドを作成する必要がありますTurtle。テーブルは次の場所に保存されます。turtle.txt

Id Num. Title           CatchDate
433417  RedTurtle       2001-06-29
493303  BlueTurtle      1998-09-20
259497  Turtle          1985-05-08
229505  RedTurtle       1994-07-13
473076  OrangeTurtle    2002-03-08
221907  Blueturtle      1999-07-02
457032  Turtle          1993-04-09
490359  RedTurtle       1996-11-12
494595  SnappingTurtle  1985-05-20
402421  BlueTurtle      1999-08-16

ベストアンサー1

awkを使用してください:

$ awk '$2 == "Turtle" {print $1}' turtle.txt
259497
457032
  • $2選択するフィールドです。
  • Turtle一致するテキストです。
  • {print $1}最初のフィールドを印刷することです。
  • turtle.txtソースファイルの名前です。

sedを使用してください:

$ <infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/([^\n]*).*/\1/;p};d'

説明する:

  • <infileソースファイル
  • sed -EPOSIX ERE(拡張正規表現)でsedを使用する
  • 's/[[:blank:]]+/\n/g+すべての(実行中の)タブスペースを新しい行に置き換えます。
  • /([^\n]+\n){1}Turtle\n/フィールドn(ここで使用n-1)が一致する場合Turtle(正確に一致)。
  • ([^\n]*).*/\1/フィールド1抽出(最初の行)
  • p};d'選択内容を印刷し、いずれにせよすべてを削除します。

すべてのフィールド合計ペアの一般的な解決策nm

<infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/{s/([^\n]+\n){0}([^\n]*).*/\2/;p};d'
  • <infileソースファイル
  • sed -E 'ERE 正規表現を使用する sed の場合。
  • s/[[:blank:]]+/\n/gすべての入力をタブまたはスペースから行に分割します。
  • /([^\n]+\n){1}Turtle/パターンスペースが最初のフィールドと一致する場合(ここでは()nが使用されます)。n-1{1}
  • {一連のコマンドを開始します。
  • s/交換(s///コマンド)を開始します。
  • ([^\n]+\n){0}m-1{0})行を一致させます(フィールドの場合m)。
  • ([^\n]*)逆参照に残るようにフィールド(行)をキャプチャします\2
  • .*パターンスペース(元の行)の他のすべての項目と一致します。
  • /\2/上記のすべての項目(パターンスペース)を\2
  • ;p};印刷してみてください。コマンドシーケンスを閉じます。
  • dとにかくパターンスペースを削除して再起動してください。
  • 'sed コマンドを終了します。

おすすめ記事