我是使用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 :(得分: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
答案 1 :(得分:1)
如果要将行号添加到最后一列:
perl -i -npe 's/$/"\t$."/e' file
,其中
-i
替换文件in-pace(如果要将结果打印到标准输出,请删除); -n
会导致Perl将替换应用于文件中的每一行,就像 sed ; -p
打印表达式的结果; -e
接受Perl表达式; s/.../.../e
将第一部分替换为第二部分(用斜杠分隔),e
标志使Perl将替换为Perl表达式; $
是行尾锚点; $.
变量保留当前行的数量换句话说,该命令会使用制表符后跟行号$
替换行尾($.
)。
答案 2 :(得分: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,基本上允许您将命令的输出视为文件。