1

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

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

删除给定的列(即第 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 命令的强大功能很陌生。

谢谢!

4

3 回答 3

2

另一种方法是使用 awk

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

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

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

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

于 2012-10-13T01:38:42.580 回答
1

单程:

perl -i -pwe 's/^([^\t*])\t([^\t*])\t[^\t*]\t(.*)/$1\tid$.\t$2\t$3\taddress/;' FILENAME
于 2012-10-13T01:37:41.897 回答
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 。文本文件。

这些答案正是我最初打算做的。

感谢你的帮助。

于 2012-10-13T02:52:58.530 回答