次のような複数行を含むファイルがあります。
ブランド、モデル、インチ、価格
dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
価格が10,000を超える行を削除したいです。 grepを使用できますか?
答え1
次のコマンドを使用して、価格が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以上を意味します。
答え2
可能ですが、grep
数値ではなく文字列に対して機能する正規表現を使用します。
grep -v '[0-9]\{5\}$' input.txt
-v
一致する行を削除します。前のコンテンツがn回繰り返されたことを示す[0-9]
任意の数字と一致します\{n\}
(この例では5回、つまり10,000回以上)。$
行の終わりと一致します。
awk
数値を比較できるので、作業に適しています。
awk '$4<10000{print}' input.txt
またはパール:
perl -ane 'print if $F[-1] < 10000' input.txt
答え3
例の入力を考えると、次のようになります。
$ 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
答え4
努力する
cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt
どこ
- 条件 NR==1 はヘッダー行を保持します。