복잡한 문자열을 파일의 열 중 하나로 바꾸는 방법은 무엇입니까?

복잡한 문자열을 파일의 열 중 하나로 바꾸는 방법은 무엇입니까?

다음과 같은 파일이 있습니다(1kG_MDS5.bim).

1   rs58108140  0   10583   A   G
1   1:11508[b37]A,G 0   11508   A   G
1   1:15820[b37]G,T 0   15820   T   G
1   1:16257[b37]C,G 0   16257   C   G
1   1:16378[b37]C,T 0   16378   T   C

두 번째 열에서 [b37] 항목을 모두 제거하고 쉼표를 해당 열로 대체하여 최종 결과가 다음과 같도록 하고 싶습니다.

1   rs58108140  0   10583   A   G
1   1:11508:A:G 0   11508   A   G
1   1:15820:G:T 0   15820   T   G
1   1:16257:C:G 0   16257   C   G
1   1:16378:C:T 0   16378   T   C

다음 명령을 실행하여 이 문제를 부분적으로 해결하려고 했습니다([b37]만 제거).

sed -i -E 's/([b37])/:/g' 1kG_MDS5.bim

하지만 나는 이것을 얻습니다:

1   rs58108140  0   1058:   A   G
1   1:11508[:::]A,G 0   11508   A   G
1   1:15820[:::]G,T 0   15820   T   G
1   1:1625:[:::]C,G 0   1625:   C   G

위와 같이 선이 표시된 최종 결과를 얻는 방법을 알려주십시오. sed 솔루션일 필요는 없으며(awk가 있으면 좋을 것임) 파일에는 약 600만 줄이 포함되어 있습니다.

답변1

다음을 시도해 볼 수 있습니다.

sed 's/\[b37\]\(.\),/:\1:/' 1kG_MDS5.bim

산출:

1   rs58108140  0   10583   A   G
1   1:11508:A:G 0   11508   A   G
1   1:15820:G:T 0   15820   T   G
1   1:16257:C:G 0   16257   C   G
1   1:16378:C:T 0   16378   T   C

패턴의 문제는 대괄호가 이스케이프되지 않기 때문에 sed문자열 "[b37]" 대신 b, 3 및 7의 발생을 바꾸려고 한다는 것입니다.

관련 정보