我有一个名为data.txt的制表符分隔文件,如下所示:
A A/A ATTAA/A
GT G/G GT/GT
T T/TATATA T/T
如果整个字段与表格column1field / column1field匹配,我想用REP替换第2-3列中的字段。像这样:
A REP ATTAA/A
GT G/G REP
T T/TATATA REP
到目前为止,我有:
awk '{ gsub($1"/"$1,"REP",$0); print $0 }' data.txt
这会接近,但在部分字段匹配时进行替换。像这样:
A REP ATTAREP
GT G/G REP
T REPATATA REP
我想合并^和$但是这个:
awk '{ gsub(/^/$1"/"$1/$/,"REP",$0); print $0 }' data.txt
不起作用。
非常感谢任何帮助!
答案 0 :(得分:3)
我会像这样使用for循环:
select
t.*,
@rn := if(@group_id = group_id,
@rn + 1,
if(@group_id := group_id, 1, 1)
) increment_id
from (
select group_id
from your_table t
/* some where clauses */
order by group_id
) t
cross join (
select @rn := 0,
@group_id := - 1
) t2
说明:
awk '{for(i=2;i<=NF;i++){if($i==$1"/"$1){$i="REP"}}}1' file
答案 1 :(得分:2)
我确信这个Awk
可以简化,以其当前的形式运作,
awk -F$'\t' 'BEGIN {OFS = FS} { if ($2 == $1"/"$1 || $3 == $1"/"$1) {gsub($1"/"$1,"REP",$2); gsub($1"/"$1,"REP",$3)} }1' data.txt
A REP ATTAREP
GT G/G REP
T REPATATA REP