두 번째 탭으로 구분된 필드를 같은 줄에 있는 첫 번째 밑줄로 구분된 필드로 바꾸고 싶습니다.
입력하다
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
POSIX적으로:
TAB=$(printff '\t')
sed -e "s/^\([^_]*\)\(_[^${TAB}]*${TAB}\)\([^${TAB}]*\)/\1\2\1/" <file