次の詳細を含むCSVファイルがあります。
Userid,First Name,Last Name
jaina24,Aayush,Jain
私の要件は、次のように既存のファイルに新しい列を追加することです。
Userid,Email Address,First Name,Last Name
jaina24,[email protected],Aayush, Jain
2番目の列は最初の列の値をコピーしてから@xyz.comを追加する必要があります。
答え1
次のように使用できます(正確に3つのフィールドがある場合)。
awk -F\, 'FNR==1 {print $1",Email Address,"$2","$3} FNR!=1{print $1","$1"@xyz.com,"$2","$3}' input_file
答え2
awkを使用できます。
awk 'BEGIN{FS=OFS=","}{$1=$1 OFS (FNR>1 ? $1 "@xyz.com" : "Email address")}1' file
または sed
sed '1s/[^,]*/&,Email address/;1!s//&,&@xyz.com/' flie
またはbash(ただし、テキスト処理にbashを使用しないでください。シェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?)
答え3
$ perl -F, -lane 'if ($. == 1) {
splice @F, 1, 0, "Email Address";
} else {
splice @F, 1, 0,$F[0] . "\@xyz.com";
};
print join ",", @F' input.csv
Userid,Email Address,First Name,Last Name
jaina24,[email protected],Aayush,Jain
答え4
Email Address
Miller()を使用してフィールドを作成しますmlr
。
$ mlr --csv put '$["Email Address"] = $Userid . "@xyz.com"' file
Userid,First Name,Last Name,Email Address
jaina24,Aayush,Jain,[email protected]
また、新しいフィールドを2番目の列に移動します。
$ mlr --csv put '$["Email Address"] = $Userid . "@xyz.com"' then reorder -f Userid,"Email Address" file
Userid,Email Address,First Name,Last Name
jaina24,[email protected],Aayush,Jain