亲爱的堆叠溢出社区,
我正在使用bash编辑文本的工作中遇到麻烦。下面是我想要做的事情:使用这样的输入文件:
A B 0
C D 1
E F 2
C D 2
我想根据前3列的信息追加另一列,这将是一个具有条件判断的逐行任务。
特别地,对于给定的行,如果第三列中为0,则附加值将是第一列中的两个值副本,如果第三列中为1,则附加值将为第一列的一份副本和第二列的一份副本,如果第三列中为2,则第二列中将有两份值副本。到头来,我想要这样做:
A B 0 AA
C D 1 CD
E F 2 FF
C D 2 DD
如有任何建议请见谅。谢谢。
徐龙
发布于 2014-11-26 11:50:38
使用awk:
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
发布于 2014-11-26 11:52:31
使用sed (仅用于教育用途,awk可能是最好的方法):
sed 's/\(.\) \(.\) 0/\1 \2 0 \1\1/;s/\(.\) \(.\) 1/\1 \2 1 \1\2/;s/\(.\) \(.\) 2/\1 \2 2 \2\2/'
发布于 2014-11-28 01:56:30
这可能对您有用(GNU sed):
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
这将根据第三列的不同,追加第四列(如果该行有三列以上则插入)。
https://stackoverflow.com/questions/27157662
复制相似问题