打印具有所需格式输出的列

打印具有所需格式输出的列

我的文件中有以下数据的列表:

    -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)

相关内容