CSVファイルを移動/回転する必要があります。これが可能かどうかわかりません。
このCSVファイルの内容を想定します。
filename;rating;id;summary
S4348gjO.doc;good;0001;describing how to reach your goals
S4348gjO.doc;good;0002;some recipes for avoiding an argument
S4348gjO.doc;bad;0003;boring part of the page
A234HK.doc;fairly good;0001;how to deploy a server
A234HK.doc;bad;0002;start and stop the server
出力は次のようになります。
filename;good;fairly good;bad;id
S4348gjO.doc;describing how to reach your goals; ; ;0001
S4348gjO.doc;some recipes for avoiding an argument; ; ;0002
S4348gjO.doc; ; ;boring part of the page;0003
A234HK.doc; ;how to deploy a server; ;0001
A234HK.doc; ; ;start and stop the server;0002
答え1
欲しいものは次のとおりです。
awk 'BEGIN{FS=OFS=";"}
FNR==1{print "filename;good;fairly good;bad;id"}
$2=="good"{print $1, $4, " ", " ", $3}
$2=="fairly good"{print $1, " ", $4, " ", $3}
$2=="bad"{print $1, " ", " ", $4, $3}' infile
したがって、対応する評価列には要約が含まれ、残りの2つの列には空白が表示されます(たとえば、空のフィールドが必要な場合に置き換えます" "
)""
。
答え2
少し修正してみてくださいdon_crisstiのスクリプト
awk -F\; '
BEGIN{
P["good"]="%s;%s;;;%s\n"
P["fairly good"]="%s;;%s;;%s\n"
P["bad"]="%s;;;%s;%s\n"
}
FNR==1{
print "filename;good;fairly good;bad;id"
next
}
{
printf(P[$2],$1,$4,$3)
}
' infile
答え3
フィールドをキーフィールドとして使用し、フィールドを値フィールドとしてデータを回転させるには、reshape
Miller()サブコマンドを使用します。mlr
次に、各レコード内の新しいフィールドにヌル値を割り当て、質問に示されている順序でフィールドを並べ替えます。rating
summary
$ mlr --csv --fs ';' reshape -s rating,summary then unsparsify then reorder -f filename,good,'fairly good',bad,id file
filename;good;fairly good;bad;id
S4348gjO.doc;describing how to reach your goals;;;0001
S4348gjO.doc;some recipes for avoiding an argument;;;0002
S4348gjO.doc;;;boring part of the page;0003
A234HK.doc;;how to deploy a server;;0001
A234HK.doc;;;start and stop the server;0002
質問に示すように、欠落している値を空白で埋めます。
$ mlr --csv --fs ';' reshape -s rating,summary then unsparsify --fill-with ' ' then reorder -f filename,good,'fairly good',bad,id file
filename;good;fairly good;bad;id
S4348gjO.doc;describing how to reach your goals; ; ;0001
S4348gjO.doc;some recipes for avoiding an argument; ; ;0002
S4348gjO.doc; ; ;boring part of the page;0003
A234HK.doc; ;how to deploy a server; ;0001
A234HK.doc; ; ;start and stop the server;0002