cat、sed、awk、またはcutを使用してcsvファイルの特定の位置に列を追加するにはどうすればよいですか?

ebertbm

このコンテンツを含む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>では一部awkNR>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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ