データ例:
"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
私はちょうど同じ問題がありましたが、空のフィールドが欲しかったので、切り取り/貼り付けの回答が正しく機能しなかったため、次のように動作しました。
挿入するファイルに数行があることを確認してください。
wc -l file.csv
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