我需要在文件中每一行的开头添加一部分。
如果我的数据是
袋熊 麝香鼠 狼吞虎咽 ... 番茄酱
我需要成功
000000001 袋熊 000000002 麝香鼠 000000003 gobbledegook ... 000009982 番茄酱
使用特定的机器。我可以用 excel 来做,但最好使用命令行解决方案,这样我就可以将它集成到脚本中。有什么建议么?这也是一个较小的文件。我还需要让它处理超过 100 万行的文件。在这一点上,excel处理得非常糟糕(点击去吃午饭)
我需要在文件中每一行的开头添加一部分。
如果我的数据是
袋熊 麝香鼠 狼吞虎咽 ... 番茄酱
我需要成功
000000001 袋熊 000000002 麝香鼠 000000003 gobbledegook ... 000009982 番茄酱
使用特定的机器。我可以用 excel 来做,但最好使用命令行解决方案,这样我就可以将它集成到脚本中。有什么建议么?这也是一个较小的文件。我还需要让它处理超过 100 万行的文件。在这一点上,excel处理得非常糟糕(点击去吃午饭)
如果您需要数字零填充,awk
可能是最好的解决方案:
awk '{printf "%09d ", NR}1' file.txt
awk 是一系列condition{action}
对。对于输入文件中的每一行,按顺序评估条件,如果有条件为真,则评估相应的操作。可以省略一个或另一个。如果省略了条件,则每行都执行该操作;如果省略一个动作,则打印当前行。我们这里的第一对是{printf...}
,这只是一个动作;由于没有条件,因此每行都会对其进行评估。printf
是一个相当通用的函数,根据传递的格式字符串打印后续信息。我们在这里传递%09d
,它表示参数应该是一个整数 ( d
),用零填充 ( 0
) 打印到九位数字 ( 9
);%
开始一个格式说明符。给定的参数NR
, 是N
R
到目前为止在输入中看到的 ows。最后,我们有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