2016-12-16 66 views
0

我是使用Mac终端的新手。我需要将一个制表符分隔的列添加到包含3个现有列的文本文件中。该列看起来非常像这样:在文本文件中创建包含行号的最后一列

org1  1-20  1-40 
org2  3-35  6-68 
org3  16-38 40-16 

我需要他们看起来像这样:

org1  1-20  1-40  1 
org2  3-35  6-68  2 
org3  16-38 40-16  3 

我的道歉,如果这个问题已经覆盖。类似问题的答案有时非常深奥,不容易转化为这种具体情况。

+0

你想把行号放在最后一列还是其他的? –

+0

在最后一列中,是的。 :) – AKGreene

回答

4

在awk中。 print记录和之后所需的选项卡和行数:

$ awk '{print $0 "\t" NR }' foo 
org1  1-20  1-40 1 
org2  3-35  6-68 2 
org3  16-38 40-16 3 
+0

非常感谢!为了将来的参考,你知道在每个数字前打印一个单词的方法吗?例如“line_1,line_2,line_3等”? – AKGreene

+0

只需用'“\ t line_”'(未经测试)替换'“\ t”'。 –

0

可以paste旁边的行号相同的文件前缀(nl)文件,并全部拆除其他列(cut -f 1):

$ paste infile <(nl infile | cut -f 1) 
org1  1-20  1-40  1 
org2  3-35  6-68  2 
org3  16-38 40-16  3 

<(...)构造称为process substitution并且基本上允许您处理命令的输出,如文件。

1

如果你想行号添加到最后一列:

perl -i -npe 's/$/"\t$."/e' file 

其中

  • -i替换文件中-步伐(删除,如果你想打印结果到标准输出);
  • -n导致Perl将替换应用于文件中的每一行,就像sed;
  • -p打印表达式的结果;
  • -e接受Perl表达式;
  • s/.../.../e将第一部分替换为第二部分(用斜杠分隔),e标志使Perl将替换评估为Perl表达式;
  • $是行尾锚;
  • $.变量保持当前线

换言之的数目,则该命令将替换行($)用标签,随后的行号$.的末尾。

相关问题