web-dev-qa-db-ja.com

grepを使用してファイルから数行を削除する

そのような複数行のファイルがあります:

ブランド、モデル、インチ、価格

Dell       xps      13    9000     
macbook    pro      13    13000
asus       zenbook  13    10500

価格が10000を超える行を削除したいのですが、grepで可能か聞いてみませんか?

4
dimitrisd

以下を使用して、価格が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以上を意味します

5
heemayl

可能ですが、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
4
choroba

あなたのサンプル入力を考えると:

$ 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
2
Andy Dalton

試す

cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt

どこ

  • ヘッダー行を保持するためのNR == 1の条件。
2
Archemar