我的文件中有以下数据的列表:
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
我正在尝试对齐所有数据,以便:
-0.347689000000000
0.0743938333333333
-1.099024000000000
0.0743938333333333
-0.216910000000000
0.0879397500000000
不幸的是我无法做到这一点awk '{printf "%18s\n", $1}'
。理想的输出是这样的:
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
答案1
也许字段宽度太小。尝试
awk '{printf "%19s\n", $1}' file
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
答案2
GNU Awk ( gawk
) 和mawk
似乎都支持 Cprintf
' '
修饰符,在正数前面添加一个空格以将它们与负数对齐
' ' (a space) A blank should be left before a positive number (or empty string) produced by a signed conversion.
例如:
$ mawk '{printf "% 22.16f\n", $1}' file
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
或者,与numfmt
$ numfmt --format='% 22.16f' < file
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
答案3
您还可以使用printf(1)
:
xargs <file printf '%19.16f\n'
-0.3476890000000000
0.0743938333333333
-1.0990240000000000
0.0743938333333333
-0.2169100000000000
0.0879397500000000
或者,如果输入文件不太大,则printf
内置 shell:
undef IFS
printf '%19.16f\n' $(cat file)