패턴을 같은 줄에 있는 다른 패턴으로 바꾸고 싶습니다.

패턴을 같은 줄에 있는 다른 패턴으로 바꾸고 싶습니다.

두 번째 탭으로 구분된 필드를 같은 줄에 있는 첫 번째 밑줄로 구분된 필드로 바꾸고 싶습니다.

입력하다

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

관련 정보