.csvファイルに新しい列を挿入するには?

.csvファイルに新しい列を挿入するには?

データ例:

"Monday","12345","Friday" 

上記のファイルで、12345とFridayの間に新しい列を追加したいと思います。

どうすればいいですか?

答え1

いくつかの重いツール(例:sedまたはawk)が含まれていない場合:

paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)

ここでは、追加する列がすでにファイルに保存されていると仮定しますcolumn.file

答え2

データが示されているように単純であると仮定すると、次のことができます。

awk -F, -v OFS=, '{k=$3; $3="\"new text\""; $4=k}1' file

または、

perl -F, -lane 's/$F[1]/$F[1],"new text"/; print' file

ただし、次のように入れ子になったコンマを含めることができるデータは失敗します。

"foo", "bar,baz", "bar" 

上記のファイルは有効なcsvファイルですが、これらのソリューションでは3つではなく4つのフィールドがあるものとして扱います。データに同様の状況が含まれる場合は、適切なcsvパーサーを使用する必要があります。

答え3

私はちょうど同じ問題がありましたが、空のフィールドが欲しかったので、切り取り/貼り付けの回答が正しく機能しなかったため、次のように動作しました。

  1. 挿入するファイルに数行があることを確認してください。

    wc -l file.csv
    
  2. 1.30が与えられたと仮定し、bashループを使用してフィールド3と4の間に空のフィールドを挿入します。

    paste -d, <(cut -d, -f-3 file.csv) <(for i in `seq 1 30`; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv
    

関連情報