首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于删除列、添加id列和添加另一列unix/linux awk的linux命令。

用于删除列、添加id列和添加另一列unix/linux awk的linux命令。
EN

Stack Overflow用户
提问于 2012-10-13 01:02:06
回答 3查看 3.4K关注 0票数 1

我有一个标签分隔的文件,我想重新格式化它和删除原始,所有的一行。

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

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

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

示例:

fnamein.txt

代码语言:javascript
复制
rogelio\tdelgado\t3453434\tlas encinas\n
mario\tmoreno\t4563432\tcasinos\n
etc...

fname.out

代码语言:javascript
复制
rogelio\tid1\tdelgado\t3453434\tlas encinas\taddress\n
mario\tid2\tmoreno\t4563432\tcasinos\taddress\n
etc...

(如您所见,我在末尾添加了id列btw col和2,并添加了address列(总是相同的单词))。

我只是想知道在linux中是否有一种简单的方法可以做到这一点,我对linux命令的强大功能很陌生。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-13 01:38:42

另一种方法是使用awk。

代码语言:javascript
复制
awk -F'\t'  '{print $1, $2, $3}'   filename

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

代码语言:javascript
复制
awk '{print $1, $3}'  filename

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

票数 2
EN

Stack Overflow用户

发布于 2012-10-13 01:37:41

单程:

代码语言:javascript
复制
perl -i -pwe 's/^([^\t*])\t([^\t*])\t[^\t*]\t(.*)/$1\tid$.\t$2\t$3\taddress/;' FILENAME
票数 1
EN

Stack Overflow用户

发布于 2012-10-13 02:52:58

统一规则的回答帮助我回答了整个问题:

开始{OFS = FS} {id++}{print $1,"id"id,$2,$3,$4,"address"}‘filein.txt > test.tmp & mv test.tmp filein.txt。

这些答案完全符合我最初的打算。

谢谢大家的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12869010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档