ここでは、次の列のリストを取得します。
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.txt
、result.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