ファイルから特定の行を削除する

ファイルから特定の行を削除する

私のCSVファイルの途中に次の行があります。

Products below this line are out of stockNumber, month, year, reference, store

注:数値、月、年、参照番号、および店舗はCSVフィールドです。

コマンドラインコマンドを使用してファイルからこの行を削除するにはどうすればよいですか?

CSVは次のとおりです。

Number, month, year, reference, store
1,1,2014,13322,main
2,2,2014,13322,main
3,3,2011,1322,main
4,4,2012,3322,main
5,4,2013,122,secondary
Products below this line are out of stockNumber, month, year, reference, store
12,411,2010,122,Albany
25,41,2009,122,Dallas
35,24,2008,122,New

答え1

最も簡単な方法は、grep -v次のコマンドを使用することです。

grep -v "Products below" your_file.csv > new_file.csv

答え2

入力データに応じて、次のことを試すことができます。

$ sed '/^Products/d' file 
Number, month, year, reference, store
1,1,2014,13322,main
2,2,2014,13322,main
3,3,2011,1322,main
4,4,2012,3322,main
5,4,2013,122,secondary
12,411,2010,122,Albany
25,41,2009,122,Dallas
35,24,2008,122,New

sed -i.bak現在の場所でファイルを編集してバックアップファイルを作成するには:

sed -i.bak '/^Products/d' file

答え3

最初の単語の後の空白を含め、始まるすべての行を削除すると安全に想定できる場合は、次のようになりますProducts

  • アッ

    awk '$1!="Products" file > newfile
    
  • 真珠

    perl -ne 'print unless /^Products/' file > newfile
    

    または

    perl -ane 'print if $F[0]!="Products"' file > newfile
    

    または、その場所でファイルを編集します。

    perl -i -ne 'print unless /^Products/; ' file
    perl -i -ane 'print if $F[0]!="Products"' file 
    
  • grep(これはより短いバージョンです。svqの答え)

     grep -v ^Products file > newfile
    
  • bash(ただ楽しい)

    while read line; do [[ $line =~ ^Products ]] || echo $line; done <  file > newfile
    

答え4

sed検索パターンを使用して、そのパターンを含むすべての行を削除できます。

sed -i '/Products below this line are out of stockNumber, month, year, reference, store/d' file

関連情報