我在 Linux 系统上有一个包含各种数字的文件,所有数字都在一行上(numbers_in_one_line.txt):
1941102556 1750145810 2604905 7000793682 5160065824 3000350768 6449300295 3046118928 12693055728 257664864 13471943769
和
tr ' ' '\n' < numbers_in_one_line.txt > numbers_line_by_line.txt
printf '| %12s |\n' $(cat numbers_line_by_line.txt) > numbers_line_by_line_right.txt
数字_逐行_右.txt:
| 5150876365 |
| 4059965777 |
| 842556472 |
| 3304990536 |
| 5722391148 |
| 6186870011 |
| 70057009 |
| 2808271890 |
| 1812899872 |
| 23803433186 |
| 1010834863 |
但我希望它看起来像这样(numbers_line_by_line_right_dots.txt):
| 5.150.876.365 |
| 4.059.965.777 |
| 842.556.472 |
| 3.304.990.536 |
| 5.722.391.148 |
| 6.186.870.011 |
| 70.057.009 |
| 2.808.271.890 |
| 1.812.899.872 |
| 23.803.433.186 |
| 1.010.834.863 |
我怎样才能.
在右边每三位数字后插入一个?
printf
您可以使用单引号'
FLAG 对要用千位分组字符进行分组的数字进行操作。在手册页中printf(3)
:您可以
thousands_sep
使用以下locale
命令查看每个语言环境的千位分隔符 ( ) 值:或者,要检查您机器上当前生成的所有语言环境,请使用:
因此,为了完成您的任务,您只需
printf
对每个数字使用以下命令(您可以更改da_DK
为具有正确千位分隔符的任何语言环境):并且要按照您要求的方式打印,您不需要中间文件:
或者,如果数字太多,无法在一个命令行中容纳,您可以使用
xargs
:或者在 GNU
xargs
(或支持-a file
/--arg-file=file
选项的其他版本)中:另一个解决方案是使用Debian 版本中默认包含的numfmt
更改
LC_ALL
为所需的语言环境,并设置WIDTH
右对齐的字符数。当然,如果需要,您也可以左对齐鉴于此输入:
无需运行
tr
和/或生成临时文件或对其执行任何其他操作。使用任何支持
'
(下面用 表示\047
)限定符的awkprintf
:或者如果你不知道最宽的数字是多少,你可以让它
column
进行格式化:或者如果你的版本
column
不支持-R0
右对齐所有字段,那么你可以在 awk 中完成所有操作:请参阅无法打印句点千位分隔符,以了解如何确定计算机上的哪个区域设置将用作
.
千位分隔符。如果您的 awk 不支持
%'
添加千位分隔符,您可以随时对该部分执行此操作或类似操作:例如:
如果您拥有的数字超过 999 位,则将 999 更改为 3 的某个更高倍数。
我可能会反转每一行,放入点,然后再反转回来。
您可以以千位格式打印数字,然后使用 tr 命令将所有逗号更改为点。以下是一种方法:
在哪里: