csvファイルの最初の列のデータを2番目の列に追加します。

csvファイルの最初の列のデータを2番目の列に追加します。

次の詳細を含む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 AddressMiller()を使用してフィールドを作成します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

関連情報