我想用同一行中找到的另一个模式替换一个模式

我想用同一行中找到的另一个模式替换一个模式

我想将第二个制表符分隔字段替换为同一行中找到的第一个下划线分隔字段

输入

Cho1_01:C4WMNACXX:1:250326554   1   2 4 2 -9 1 1 4 3 1 4 1 -9 4 1 4 1 3 1 -9 4 2 2 3 3 3 3 2 3 1 1 3  
Elq3_04:C4WMNACXX:1:250326565   9   2 2 4 -9 3 -9 1 2 3 4 4 3 1 1 -9 3 3 3 -9 4 4 -9 3 3 3 3 3 3 1 1 

所需输出

Cho1_01:C4WMNACXX:1:250326554   Cho1    2 4 2 -9 1 1 4 3 1 4 1 -9 4 1 4 1 3 1 -9 4 2 2 3 3 3 3 2 3 1 1 3  
Elq3_04:C4WMNACXX:1:250326565   Elq3    2 2 4 -9 3 -9 1 2 3 4 4 3 1 1 -9 3 3 3 -9 4 4 -9 3 3 3 3 3 3 1 1 

答案1

您应该使用split中的函数awk。这是实现这一目标的方法之一。例如这里

awk '{split($1,arr,"_"); $2 = arr[1]; print}' file

这里我们使用split并用作_数组分隔符。然后第二个字段将被替换为arr[1]您想要的值。

答案2

使用 GNU sed:

sed -E 's/^([^_]*)(_[^\t]*\t)([^\t]*)/\1\2\1/' <file

POSIXly:

TAB=$(printff '\t')
sed -e "s/^\([^_]*\)\(_[^${TAB}]*${TAB}\)\([^${TAB}]*\)/\1\2\1/" <file

相关内容