序列化文件中的数据

时间:2013-10-30 00:00:55

标签: bash serialization command-line

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

如果我的数据是

Wombat
muskrat
gobbledegook
...
tomatopaste

我需要做到这一点

000000001   Wombat
000000002   muskrat
000000003   gobbledegook
...
000009982   tomatopaste

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

2 个答案:

答案 0 :(得分:4)

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

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

Awk是一系列condition{action}对。对于输入文件中的每一行,将按顺序评估条件,如果有,则评估相应的操作。可以省略一个或另一个。如果省略条件,则每行执行一次动作;如果省略动作,则打印当前行。我们的第一对是{printf...},这只是一个动作;因为没有条件,所以每行评估一次。 printf是一个非常通用的函数,根据传递的格式字符串打印后续信息。我们在这里传递%09d,它说参数应该是一个整数(d),打印零填充(0)到九位数(9); %启动格式说明符。给出的论点NR是迄今为止在输入中看到的N的{​​{1}}。{最后,我们有R,这是下一个条件,总是如此。如前所述,缺少明确的操作,将打印当前行。

答案 1 :(得分:1)

仅限Bash解决方案:

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

编辑:以上内容依赖于i未初始化或值为0这一事实。这样更安全(并且不需要{{1}子shell:

()