我有一个制表符分隔文件,我想重新格式化它并将原始文件全部删除到一行。
这是一个制表符分隔的文件,例如我想:
删除给定的列(即第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命令的强大功能不熟悉。
谢谢!
答案 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。
这些答案正是我原本打算做的。
感谢大家的帮助。