各レコードの3番目の列の一意のキーを最初の列に移動する必要があります。このキーに基づいて、各レコードには異なる合計列数(フィールド数を意味)があります。
ファイルの内容は
10,,FH,1834,1010 (newline)
11,10,BH,9899,1010 (newline)
21,11,TH,1010,345 (newline)
22,11,DA,34.65 (newline)
23,11,DA,76.89 (newline)
24,11,CC,1010 (newline)
25,11,CC,1011 (newline)
13,10,FT,200.68 (newline)
注:ファイルを貼り付けるときに何とか(改行)を追加すると、すべてのレコードが同じ行になります。
以下にawkロジックを作成しました。
awk -F',' -v OFS=, '{printf "%s" ,$3 OFS; for(i=1;i<=NF;i++) if(i!=3) printf "%s",$i OFS;printf ORS}' test1.csv
この出力を得る
,H,10,,1834,1010
,H,11,10,9899,1010
,H,21,11,1010,345KW
,U,22,11,34.65
,U,23,11,76.89
,H,24,11,1010
,H,25,11,1011
,T,13,10,200.68
希望の出力は次のとおりです。
FH,10,,1834,1010 (newline)
BH,11,10,9899,1010 (newline)
TH,21,11,1010,345 (newline)
..... ...
問題は私のコマンドにあります。 3 番目のフィールドの 1 文字がコンマで置き換えられます。
ベストアンサー1
awk -F',' '{print $3 "," $1 "," $2 "," $4 "," $5}' test1.csv
出力は次のとおりです
FH,10,,1834,1010
BH,11,10,9899,1010
TH, 21,11,1010,345
DA, 22,11,34.65 ,
DA, 23,11,76.89 ,
CC, 24,11,1010 ,
CC, 25,11,1011 ,
FT,13,10,200.68 ,
このスクリプトを変更すると、行末の問題が明らかになる可能性があります。
awk -F',' -v OFS=, '{printf "%s" ,$3 OFS; for(i=1;i<=NF;i++) if(i!=3) printf "%s",$i OFS;print ""}' test1.csv
出力は次のとおりです
FH,10,,1834,1010,
BH,11,10,9899,1010,
TH, 21,11,1010,345 ,
DA, 22,11,34.65 ,
DA, 23,11,76.89 ,
CC, 24,11,1010 ,
CC, 25,11,1011 ,
FT,13,10,200.68 ,