【问题标题】:linux command to remove a column, add id column and add another extra column unix/linux awklinux 命令删除一列,添加 id 列并添加另一个额外列 unix/linux awk
【发布时间】:2012-10-13 01:02:06
【问题描述】:

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

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

删除给定的列(即第 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 命令的新手。

谢谢!

【问题讨论】:

  • 你能给出原始文件的一行(或两行),然后显示修改后的新文件应该是什么样子吗?

标签: linux awk


【解决方案1】:

另一种方法是使用awk

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

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

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

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

【讨论】:

  • 谢谢。这是一个部分答案,几乎就在那里,但是我如何添加一个带有 id 的列,其中第 1 行是 id1,第 2 行是 id2,等等......还有我如何删除原始文件并用新文件替换它,在同一行?
  • 我纠正了大部分内容,但我如何将其保存到同名文件中,全部在一行中。如果我尝试 awk -F'\t' ''{id++}' {print $1, "id"id, $2, $3, "address"}' filnamein.txt > filenamein.txt,那么 filenamein.txt 将为空。 ..有什么想法吗?
  • awk '脚本' 文件 > tmp && mv tmp 文件
【解决方案2】:

一种方式:

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

【讨论】:

  • perl 过分了,regexp 过分了
  • 据我所知 perl 不是 Linux 的一部分
【解决方案3】:

好吧,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。

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

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多