次のように、列のリストを取得します。
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
それは重複しているようですが、とにかく、それが理解されていれば、次のように行うことができます:
まず、リストをいくつかのnameslist.txt
ファイルに保存してから、次のようにします。
sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txt
、result.txt
ファイルに次の出力を返す必要があります。
60 FREDDIE 1201 +4 61 FINLAY 1200 -2
awk '$2 ~ /^L/' file
正規表現$2
式~
を使用して2番目のフィールド^L
をテストし、一致する行を出力するようawk
に指示します。
正規表現は、^
で始まるフィールド(文字列)をL
で照合します
@ bu5hmanの答えに基づく:awkを使用すると、文字をパラメーターとして簡単に渡すことができます。
awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file
list.txt
にそのリストがあるとすると、次のことができます。
grep -h L list.txt > list_L.txt
説明:grep L list.txt
は、大文字のLを含むすべての行を提供します。オプション-h
は、ファイル名の出力を抑制しますが、複数のファイルを検索する場合にのみ必要です(例grep -h L lis*.txt
)。 > list_L.txt
を追加すると、指定したファイルに行がリダイレクトされます。
Lが "Word"の先頭(この場合は名前)にのみ出現する必要がある場合は、上記のコマンドを少し調整する必要があります。
grep -h '\<L' list.txt > list_L.txt
\<
を追加すると、「Word」の先頭と一致するため、\<L
は大文字のLで始まるWordを含む行を選択します。
別のgrepの例:
grep -E "[0-9]+ +L" file
+は前の文字の1つ以上の出現に一致するため、この場合は、少なくとも1つの数字と少なくとも1つのスペースに一致し、その後に大文字のLが続きます。
+ Eを+をリテラル '+'ではなく特殊文字として解釈する必要があります
出力:
59 LOUIS 1202 +1
62 LEON 1137 +12
73 LUCA 973 -1
可能な場合はRegExを避けてください。 AWKの例:
index($2, "L") == 1