名前が特定の文字で始まるファイルから行を抽出する

名前が特定の文字で始まるファイルから行を抽出する

ここでは、次の列のリストを取得します。

59  LOUIS   1202    +1
60  FREDDIE 1201    +4
61  FINLAY  1200    -2
62  LEON    1137    +12
63  HARLEY  1132    +6
64  DAVID   1127    -1
65  MOHAMMAD1100    +6
66  REECE   1095    -1
67  KIAN    1090    0
68  KAI     1056    -6
69  KYLE    1030    -18
70  BRANDON 1011    -4
71  HAYDEN  1006    +5
72  ZACHARY 995     +10
73  KIERAN  973     -12
73  LUCA    973     -1
75  ASHTON  954     +4
76  BAILEY  939     -6
77  JAKE    913     +10
78  GABRIEL 910     +14
79  SAM     900     -2
80  EVAN    890     0
81  BRADLEY 847     -13

次のように文字「L」の行のみを抽出するにはどうすればよいですか?

73  LUCA    973     -1

答え1

awk '$2 ~ /^L/' file

正規表現を使用して2番目のフィールドをテストし、一致する行をawk印刷するように指示します。$2~^L

正規表現は($2)形式の2番目のフィールドと一致します。^L

答え2

@bu5hmanの答えによると、awkを使用すると、文字を引数として簡単に渡すことができます。

awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file

答え3

これは重複しているように見えますが、とにかく理解している場合は、次のようにできます。

まず、リストを一部のnameslist.txtファイルに保存してから、次の操作を行います。

sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txtresult.txtファイルに次の出力を返す必要があります。

60 FREDDIE 1201 +4 61 FINLAY 1200 -2

答え4

別のgrepの例:

grep -E "[0-9]+ +L" file

+は1つ以上の前の文字と一致するため、この場合、少なくとも1つの数字と少なくとも1つのスペース、その後に大文字のLが続きます。

-Eでは、+をリテラル「+」ではなく特殊文字として解釈する必要があります。

出力:

59  LOUIS   1202    +1
62  LEON    1137    +12
73  LUCA    973     -1

関連情報