データの例:
"Monday","12345","Friday"
上記のファイルで、12345から金曜日の間に新しい列を追加します。
どうやってやるの ?
重い楽器(sed
やawk
など)を含まないようにするには:
paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)
これは、追加する列がファイルcolumn.file
に保存されていることを前提としています。
あなたのデータがあなたが示すほど単純であると仮定すると、あなたは行うことができます
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パーサーを使用する必要があります。
私は同じ問題を抱えていましたが、空白のフィールドが必要だったので、切り取り/貼り付けの答えは私にとってはうまくいきませんでしたので、これは私にとってうまくいきました:
挿入するファイルの行数を調べます。
wc -l file.csv
だから1.
は30を与え、次にbashループを使用してフィールド3と4の間にnullフィールドを挿入します。
paste -d, <(cut -d, -f-3 file.csv) <(for i in `seq 1 30`; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv