匹配模式并以匹配的字符串追加每一行,直到下一次匹配为止。WES和GET2在下面的示例中是匹配的:我知道如何使用一种模式
awk '$1~/WES/{A=$1}{print A,$0}'但不知道如何处理两种模式:
输入:
WES S1 S2 SET3
S2 S4 S5
D3 D7 F2
GET2 F4 S3 64
SES2 32 Q3
Y67 98 GT1
WES S2 S4 SET3
S2 S4 S5
D3 D7 F2输出:
WES WES S1 S2 SET3
WES S2 S4 S5
WES D3 D7 F2
GET2 GET2 F4 S3 64
GET2 SES2 32 Q3
GET2 Y67 98 GT1
WES WES S2 S4 SET3
WES S2 S4 S5
WES D3 D7 F2发布于 2014-07-14 20:30:07
$ awk 'match($1,/WES|GET2/){A=substr($1,RSTART,RLENGTH)} {print A,$0}' file
WES WES S1 S2 SET3
WES S2 S4 S5
WES D3 D7 F2
GET2 GET2 F4 S3 64
GET2 SES2 32 Q3
GET2 Y67 98 GT1
WES WES S2 S4 SET3
WES S2 S4 S5
WES D3 D7 F2顺便说一句,在前面附加文本是prepending,而不是appending,因为它是附加到末尾的。
发布于 2014-07-14 21:13:24
awk '$1 ~ /^(WES|GET2)$/{ p = $1 FS }{ print p $0 }' file.txt输出:
WES WES S1 S2 SET3
WES S2 S4 S5
WES D3 D7 F2
GET2 GET2 F4 S3 64
GET2 SES2 32 Q3
GET2 Y67 98 GT1
WES WES S2 S4 SET3
WES S2 S4 S5
WES D3 D7 F2其他变动:
awk '$1 ~ /^(WES|GET2)$/{ p = $1 }{ print p FS $0 }' file.txt
awk '$1 ~ /^(WES|GET2)$/{ p = FS $1 }{ $0 = p $0 } 1' file.txt
awk '$1 ~ /^(WES|GET2)$/{ p = $1 }{ $0 = p FS $0 } 1' file.txthttps://stackoverflow.com/questions/24743857
复制相似问题