私は次のような状況にあります。
ユーザー名と異なる値を含む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