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 -E
POSIX ERE(拡張正規表現)でsedを使用する's/[[:blank:]]+/\n/g
+
すべての(実行中の)タブスペースを新しい行に置き換えます。/([^\n]+\n){1}Turtle\n/
フィールドn
(ここで使用n-1
)が一致する場合Turtle
(正確に一致)。([^\n]*).*/\1/
フィールド1抽出(最初の行)p};d'
選択内容を印刷し、いずれにせよすべてを削除します。
すべてのフィールド合計ペアの一般的な解決策n
:m
<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 コマンドを終了します。