2017-07-11 15 views
0

は、私は、この構造を持つファイル特定の文字列を含む最初の10行を削除するには?

1001.txt 
1002.txt 
1003.txt 
1004.txt 
1005.txt 
2001.txt 
2002.txt 
2003.txt 
... 

今どのように私は「2」で始まる行の最初の10個の数字を削除することができますがあると? 「2」から始まる10行以上の行がある可能性があります。

私はgrep '^2' file | wc -lを使用して '2'で始まる行の数を見つけることができます。しかし、どのように行の最初の10の数字を削除するには?このPerlのワンライナーを通してあなたがパイプあなたのリストをすることができます

+0

をあなたがここにhttps://stackoverflow.com/questions/23696871/how-to-remove-only-the手掛かりを見つけるかもしれません-a-a-line-in-a-file-using-sed – JeffUK

答えて

2

perl -p -e '$_="" if (/^2/ and $i++ >= 10)' 
+0

どのファイルをチェックするのかを指定するには? – pwan

+0

@Pwan 'man perlrun'と' -p'と '-i'オプションを見てください。 – slim

0

awkの代替:

awk '{ if (substr($0,1,1)=="2") { count++ } if (count > 10 || substr($0,1,1)!="2") { print $0 } }' filename 

行の最初の文字がカウンタをインクリメント、2である場合。 countが10より大きい場合、または最初の文字が2でない場合にのみ、行を出力します。

0

awkの中でもう1つ。データとして値2を使用したテストには、関連するデータが3行しかありませんでした。交換してください10.

$ awk '/^2/ && ++c<=2 {next} 1' file 
1001.txt 
1002.txt 
1003.txt 
1004.txt 
1005.txt 
2003.txt 
. 
. 
. 

後者2の説明:

$ awk '/^2/ && ++c<=2 { # if it starts with a 2 and counter still got iterations left 
    next     # skip to the next record 
} 1      # (else) output 
' file 
+1

または、論理を反転する: 'awk '!/^2/|| ++ c> 10'' –

+0

私はあなたのような結果を得ました。ファイル内では何も変わりません。 – pwan

+0

ソースファイルを変更しないので、出力を新しいファイルにリダイレクトする必要があります。それはより安全です。 –

関連する問題