UNIX/Linux での列の並べ替え

UNIX/Linux での列の並べ替え

各レコードの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 ,

おすすめ記事