9003行を含む次のデータセット名a.txtがあります。
571 43544000424023503222
572 43504442020202303202
573 40340440323043033204
574 40303445340343505242
... ...
16078 50200000023322000202
16079 33233500320452300252
16080 04200330233532050502
16081 30200400323435434202
最初の列の値が右揃えになり、2番目の列のすべての行が同じフィールドで始まり、次のように最初の列と2番目の列の間にスペースがあるデータファイルをインポートしたいと思います。
571 435440004240235032225
572 435044420202023032022
573 403404403230430332040
574 403034453403435052423
... ...
16078 502000000233220002021
16079 332335003204523002521
16080 042003302335320505023
16081 302004003234354342024
私はこのコードを試しています:
awk '{printf "%-5s \n", $1,$2}' a.txt | # -5 indicate the maximum number of characters in the first column
expand > b.txt
2番目の列は正しい位置で始まりますが、最初の列は次のように出力で左揃えされます。
571 43544000424023503222
572 43504442020202303202
573 40340440323043033204
574 40303445340343505242
... ...
16078 50200000023322000202
16079 33233500320452300252
16080 04200330233532050502
16081 30200400323435434202
この問題を解決するのに役立ちますか?
よろしくお願いします。
答え1
-
フラグ(左揃え)は必要なく、デフォルトの並べ替えは右です。
awk '{printf "%5s %s\n",$1,$2}' a.txt
答え2
printf
文字列長修飾子を使用して、文字列の形式を右揃えに指定できます。len
最初のフィールドの前の間隔の長さ。
awk '{len=5-length($1); printf "%-*.*s %s %s\n", len,len," ",$1,$2}' a.txt