使用Bash逐行文本编辑

时间:2014-11-26 19:46:07

标签: linux bash awk sed

亲爱的stackoverflow社区,

我在使用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

任何建议表示赞赏。感谢。

旭龙

3 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:0)

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

sed 's/\(.\) \(.\) 0/\1 \2 0 \1\1/;s/\(.\) \(.\) 1/\1 \2 1 \1\2/;s/\(.\) \(.\) 2/\1 \2 2 \2\2/'

答案 2 :(得分:0)

这可能适合你(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

这将附加第四列(如果行有三列以上,则插入),具体取决于第三列。