我想将第二个制表符分隔字段替换为同一行中找到的第一个下划线分隔字段
输入
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