2番目のタブで区切られたフィールドを、同じ行の最初の下線で区切られたフィールドに置き換えたいと思います。
入力する
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
。これがこの目標を達成する1つの方法です。たとえば、ここ
awk '{split($1,arr,"_"); $2 = arr[1]; print}' file
ここでは配列区切り記号split
として使用しています。これにより、2番目のフィールドが希望の値_
に置き換えられます。arr[1]
答え2
GNU sedの使用:
sed -E 's/^([^_]*)(_[^\t]*\t)([^\t]*)/\1\2\1/' <file
POSIX的に:
TAB=$(printff '\t')
sed -e "s/^\([^_]*\)\(_[^${TAB}]*${TAB}\)\([^${TAB}]*\)/\1\2\1/" <file