linux命令删除一列,添加id列并添加另一列额外的列unix / linux awk

时间:2012-10-13 01:02:07

标签: linux awk

我有一个制表符分隔文件,我想重新格式化它并将原始文件全部删除到一行。

这是一个制表符分隔的文件,例如我想:

删除给定的列(即第3列), 在中间添加另一个id列(即btw列1和2),其中每行是id(例如,row1是id1,row2是id2,等等......),然后 在文本的末尾添加另一列(即每行为hello的文本)。

所有更改都在一行中,最后删除原始文件,新文件与原始文件相同。

示例:

fnamein.txt

rogelio\tdelgado\t3453434\tlas encinas\n
mario\tmoreno\t4563432\tcasinos\n
etc...


fname.out

rogelio\tid1\tdelgado\t3453434\tlas encinas\taddress\n
mario\tid2\tmoreno\t4563432\tcasinos\taddress\n
etc...

(你可以看到我在最后添加了id列btw col 1和2,以及地址栏(总是相同的单词))。

只是想知道在linux中有一个简单的方法,我对linux命令的强大功能不熟悉。

谢谢!

3 个答案:

答案 0 :(得分:2)

另一种方法是使用awk

awk -F'\t'  '{print $1, $2, $3}'   filename

其中-F是字段分隔符。 awk会将文件分成相应的字段,您需要做的就是打印字段。 $ 1是第一个字段等。要跳过字段,请省略它。

awk '{print $1, $3}'  filename

只会打印第一个和第三个字段。

答案 1 :(得分:1)

一种方式:

perl -i -pwe 's/^([^\t*])\t([^\t*])\t[^\t*]\t(.*)/$1\tid$.\t$2\t$3\taddress/;' FILENAME

答案 2 :(得分:1)

好吧,unixrules的回答帮助我回答了整个问题:

awk -F'\ t''BEGIN {OFS = FS} {id ++} {print $ 1,“id”id,$ 2,$ 3,$ 4,“address”}'filein.txt> test.tmp&& mv test.tmp filein.txt。

这些答案正是我原本打算做的。

感谢大家的帮助。