使用 awk 格式化输出中的列

使用 awk 格式化输出中的列

我有以下数据集名称 a.txt,包含 9003 行:

571 43544000424023503222
572 43504442020202303202
573 40340440323043033204
574 40303445340343505242
...       ...

16078 50200000023322000202
16079 33233500320452300252
16080 04200330233532050502
16081 30200400323435434202

我想要获得一个数据文件,其中第一列中的值右对齐,第二列中所有行的同一字段开始,第一列和第二列之间有一个空格,这样:

  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

第二列在正确的位置开始,但是第一列在输出中左对齐,如下所示:

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

相关内容