csvファイル内のループを使用して各行ごとに別々のファイルを作成する

csvファイル内のループを使用して各行ごとに別々のファイルを作成する

以下を含むCSVファイルがあります。

a,b,c  
d,e,f   
g,h,i   

a.txtこれで、このcsvの各レコードに対して3つの別々のファイル、d.txt(最初のフィールド名にちなんで命名)を作成したいと思います。g.txt

各ファイルにはコマンドラインが含まれています。

  • a.txt以下を含める必要があります。

    cat b|grep c
    
  • d.txt以下を含める必要があります。

    cat e|grep f
    
  • g.txt以下を含める必要があります。

    cat h|grep i
    

繰り返すことはできますが、ファイルに追加することはできません。

ベストアンサー1

awkその言語でコーディングすると仮定すると、sh引用フィールド、カンマ、または改行文字を含まない単純なcsvがあります。

LC_ALL=C awk -F, -v q="'" '
  function shquote(s) {
    gsub(q, q "\\" q q, s)
    return q s q
  }
  {
    file = $1".txt"
    print "grep -e "shquote($3)" < "shquote($2) > file
    close(file)
  }' < file.csv

代わりに、以下を実行してcat b | grep cくださいgrep -e 'c' < 'b'

  1. 接続することは意味がありません。一つ文書。ここでは、grepstdinをファイルに直接設定して出力をパイプする代わりにリダイレクトできますcat
  2. シェル構文の特殊文字の問題を回避するには、文字列を引用します。
  3. で始まる正規表現の問題を避けるgrep -e regexpのではなく使用してください。grep regexp-

おすすめ記事