0

我需要在文件中每一行的开头添加一部分。

如果我的数据是

袋熊
麝香鼠
狼吞虎咽
...
番茄酱

我需要成功

000000001 袋熊
000000002 麝香鼠
000000003 gobbledegook
...
000009982 番茄酱

使用特定的机器。我可以用 excel 来做,但最好使用命令行解决方案,这样我就可以将它集成到脚本中。有什么建议么?这也是一个较小的文件。我还需要让它处理超过 100 万行的文件。在这一点上,excel处理得非常糟糕(点击去吃午饭)

4

2 回答 2

4

如果您需要数字零填充,awk可能是最好的解决方案:

awk '{printf "%09d ", NR}1' file.txt

awk 是一系列condition{action}对。对于输入文件中的每一行,按顺序评估条件,如果有条件为真,则评估相应的操作。可以省略一个或另一个。如果省略了条件,则每行都执行该操作;如果省略一个动作,则打印当前行。我们这里的第一对是{printf...},这只是一个动作;由于没有条件,因此每行都会对其进行评估。printf是一个相当通用的函数,根据传递的格式字符串打印后续信息。我们在这里传递%09d,它表示参数应该是一个整数 ( d),用零填充 ( 0) 打印到九位数字 ( 9);%开始一个格式说明符。给定的参数NR, 是NR到目前为止在输入中看到的 ows。最后,我们有1,这是下一个条件,始终为真。如前所述,缺少显式操作,当前行被打印。

于 2013-10-30T00:14:25.490 回答
1

仅限 Bash 的解决方案:

 ( while read -r; do printf "%09u   %s\n" $((++i)) "$REPLY" ; done ) < file.txt

编辑:以上依赖于未初始化或值为0的事实i。这更安全一些(并且不需要()子shell:

i=0; while read -r; do printf "%09u   %s\n" $((++i)) "$REPLY" ; done < file.txt
于 2013-10-30T00:34:51.770 回答