このコンテンツを含むcsvファイルがあります。
col1, col2, col5
1, 1, 1
2, 2, 2
3, 3, 3
4, 4, 4
ファイルの3番目の位置に、ヘッダーはあるが値が空の列を追加する必要があります。
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
cat、sed、awk、cutなどのLinuxコマンドの1つを使用してそれを行う方法はありますか?
私は、cutを使用すると、cut -d、-f1,2,3 file1> file2の列でファイルを変更できることを知っています。ただし、カスタム列を追加するオプションはないようです。
どんな助けでも大歓迎です。
これは私ができる最善のことです awk
$ awk -v FS=',' -v OFS=',' 'BEGIN{print "col1, col2, col3, col4"} NR>1{k=$3; $3="\t"; $4=k; print $0}' newfile
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
リダイレクト演算子を使用して新しいファイルに書き込むことができます(> newfile
最後に)
ロジックは単純明快です:-
-v FS=',' -v OFS=','
入力フィールドと出力フィールドの区切り文字をcomma(,
)に設定しますBEGIN{print "col1, col2, col3, col4"}
更新された列名で新しいヘッダーを作成します。ファイルの実際の処理の前にBEGIN
ブロックawk
が実行されることを忘れないでください<action>
では一部awk
、NR>1{k=$3; $3="\t"; $4=k; print $0}
中に第三列のバックアップを取って、元のファイルからヘッダを飛ばしていますk
それを上に書き込み、空に置き換え、tab-space
そして第四列の古い第三列の値として復元されます。fedorqui
コメントでの別のクールな提案、それを行うための次のさらに簡単な方法。
$ awk 'BEGIN {FS=OFS=","} NR==1{$0="col1, col2, col3, col4"} NR>1{$3=sprintf("\t,%s",$3)}1' file
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加