首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Bash逐行编辑文本

用Bash逐行编辑文本
EN

Stack Overflow用户
提问于 2014-11-26 11:46:07
回答 3查看 81关注 0票数 0

亲爱的堆叠溢出社区,

我正在使用bash编辑文本的工作中遇到麻烦。下面是我想要做的事情:使用这样的输入文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A B 0
C D 1
E F 2
C D 2

我想根据前3列的信息追加另一列,这将是一个具有条件判断的逐行任务。

特别地,对于给定的行,如果第三列中为0,则附加值将是第一列中的两个值副本,如果第三列中为1,则附加值将为第一列的一份副本和第二列的一份副本,如果第三列中为2,则第二列中将有两份值副本。到头来,我想要这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A B 0 AA
C D 1 CD
E F 2 FF
C D 2 DD

如有任何建议请见谅。谢谢。

徐龙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-26 11:50:38

使用awk:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '$3==0{$4=$1$1} $3==1{$4=$1$2} $3==2{$4=$2$2} 1' file
A B 0 AA
C D 1 CD
E F 2 FF
C D 2 DD
票数 3
EN

Stack Overflow用户

发布于 2014-11-26 11:52:31

使用sed (仅用于教育用途,awk可能是最好的方法):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed 's/\(.\) \(.\) 0/\1 \2 0 \1\1/;s/\(.\) \(.\) 1/\1 \2 1 \1\2/;s/\(.\) \(.\) 2/\1 \2 2 \2\2/'
票数 0
EN

Stack Overflow用户

发布于 2014-11-28 01:56:30

这可能对您有用(GNU sed):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed -r '/^(\S+)(\s+)(\S+)\s+0/s//&\2\1\1/;/^(\S+)(\s+)(\S+)\s+1/s//&\2\1\3/;//^(\S+)(\s+)(\S+)\s+2/s//&\2\3\3/' file

这将根据第三列的不同,追加第四列(如果该行有三列以上则插入)。

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

https://stackoverflow.com/questions/27157662

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文