入力ファイル:
"Run Date/Time: 2022-02-09 12:47",,,GOOD_MORNING_WORLD
"File Processed: AB-FILE2.20220209.110516",,,GOOD_MORNING_WORLD
AB1234,5," PQR2",GOOD_MORNING_WORLD
AB-345,10," PQR2",GOOD_MORNING_WORLD
XY890,20," PQR2",GOOD_MORNING_WORLD
期待される出力ファイル:
Codes Produced, Count, PQR, Run Date, Run Time, File Processed
AB1234,5,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
AB-345,10,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
XY890,20,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
上記の出力形式を実装するのに役立ちます。
以下のコマンドを試しましたが、列と値を提供します。各行から列ヘッダーを削除する必要があります。
awk -F, 'NR==1 {FN = $1; next} NR==2 {DT = $1; next} {print $1,$2,$3,FN,DT,$4}' OFS=, InputFile.csv > InputFile_Int.csv
AB1234,5," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
AB-345,10," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
XY890,20," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
よろしくお願いします。
ベストアンサー1
置かないでくださいFS=
。OFS=
後ろに人々がスクリプトを読むときにデフォルトのFSおよび/またはOFS値があると仮定し、実際に変更したという事実だけを確認するため、コードを読みにくくするからです。代わりに、doawk -Fx -v OFS=y 'script' file
やawk 'BEGIN{FS="x";OFS="y"} script' file
notなどの両方を事前設定してくださいawk -Fx 'script' OFS=y file
。この規則の唯一の例外は、異なる入力ファイルに対して異なる値に設定し、入力ファイル名の間にこれらの値の一方または両方を設定する必要がある場合です。
また、カスタム変数にはすべて大文字の変数名を使用しないでください。これにより、コードが混乱し、実際には使用しない組み込み変数名を使用しているように見え、クラッシュが発生する可能性があります。定義されていると思いますが、実際には組み込み変数名によって壊れたり壊れたりする変数名です。
$ cat tst.awk
BEGIN {
FS = "[\"[:space:]]*,[\"[:space:]]*"
OFS = ","
}
NR < 3 {
split($1,parts," ")
if ( NR == 1 ) {
date = parts[3]
time = parts[4]
}
else {
file = parts[3]
print "Codes Produced"," Count"," PQR"," Run Date"," Run Time"," File Processed"
}
next
}
{ print $1, $2, "\"" $3 "\"", date, time, file }
$ awk -f tst.awk InputFile.csv
Codes Produced, Count, PQR, Run Date, Run Time, File Processed
AB1234,5,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
AB-345,10,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
XY890,20,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516