そのような複数行のファイルがあります:
ブランド、モデル、インチ、価格
Dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
価格が10000を超える行を削除したいのですが、grepで可能か聞いてみませんか?
以下を使用して、価格が10000を超える行を取得できます。
$ grep -E '.* [0]*[1-9][0-9]{4,}$' file.txt
macbook pro 13 13000
asus zenbook 13 10500
これらの行を削除する場合は、-v
を追加します。
$ grep -vE '.* [0]*[1-9][0-9]{4,}$' file.txt
Dell xps 13 9000
.*
は、価格を含む最後の列までのすべての文字に一致します
[1-9]
は価格の最初の桁と一致します
[0-9]{4,}$
は、最初の桁の後の4桁以上に一致するため、合計5桁で10000以上を意味します
可能ですが、grep
は、数値ではなく文字列を操作する正規表現を使用します。
grep -v '[0-9]\{5\}$' input.txt
-v
は、一致する行を削除します。 [0-9]
は任意の数字に一致します。\{n\}
は、先行するものがn回繰り返されることを意味します(この場合は5回、つまり10000以上)。 $
は行末に一致します。
awk
は数値を比較できるため、ジョブに適しています。
awk '$4<10000{print}' input.txt
またはPerl:
Perl -ane 'print if $F[-1] < 10000' input.txt
あなたのサンプル入力を考えると:
$ cat /tmp/foo
Dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
Awkを使用できます。
$ awk '{ if ($4 <= 10000) print; }' /tmp/foo
Dell xps 13 9000
試す
cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt
どこ