CSVフォーマット出力

CSVフォーマット出力

私は次のような状況にあります。

ユーザー名と異なる値を含むcsv(シリアル番号に似ています)

Test; User; WKCVW432994; ; ;
Test; Users; Middlename; WEJDFH34992; ;
Test; Some; Weird; Guy; WEFDJJ23453;
Test; Some; Even; Weirder; Guy; WEFDJJ23453

本当に必要なのは、区切り文字を省略し、次のように名前の後とシリアル番号の前に静的値を貼り付けることです。

Test User StaticValue WKCVW432994
Test Users Middlename StaticValue WEJDFH34992
Test Some Weird Guy StaticValue WEFDJJ23453
Test Some Even Weirder Guy StaticValue WEFDJJ23453

私は姓を持つ人々のためにこれをしました。

awk -F";" '{k=$3; $3="StaticValue"; $4=k OFS $(NF--); print}' in.csv > out.csv

フルネームに必要な名前の長さ/セル数の違いが現在の問題です。

答え1

必要なものは次のとおりです。

$ awk '{gsub(/;/,FS); $NF="StaticValue " $NF} 1' file
Test User StaticValue WKCVW432994
Test Users Middlename StaticValue WEJDFH34992
Test Some Weird Guy StaticValue WEFDJJ23453
Test Some Even Weirder Guy StaticValue WEFDJJ23453

上記のコードは、awkを使用するすべてのUNIXシステムのすべてのシェルで動作します。

答え2

カウントダウンから始めるのが実際には正しいことです。あなたはGNU awk試すことができます

awk -F ";" '{last=NF; while ($last ~ /^[[:space:]]*$/) last--; new=last+1; $new=$last; $last="StaticValue"; print}' in.csv  > out.csv

これにより、「静的値」を挿入する前に、RegExp一致と挿入(ユーザーが行ったように)によって最後の「null以外」フィールドが決定されます。

の場合、mawk構文を少し変更する必要があります。

awk -F ";" '{last=NF; while ($last ~ /^ *$/) last--; new=last+1; $new=$last; $last="StaticValue"; print}' in.csv  > out.csv

関連情報