열이 문자로 시작하는 경우 줄 끝 제거

열이 문자로 시작하는 경우 줄 끝 제거

두 번째 열에 잘라야 할 일부 행이 있는 대용량 파일이 있습니다. 현재:

10 10:135524264:C:G 0 135524264 C G
10 rs55726203:135524334:A:G 0 135524334 A G

만약에두번째열은 '로 시작합니다.RS', 해당 열의 콜론 뒤의 모든 항목을 삭제해야 합니다. 따라서 필요한 출력은 다음과 같습니다.

10 10:135524264:C:G 0 135524264 C G
10 rs55726203 0 135524334 A G

저는 유닉스를 처음 접했고 필요한 부분에 대한 포럼 질문만 찾을 수 있었습니다. 콜론 뒤를 제거 해야 sed 's/:.*//'하지만 "rs"로 시작하는 두 번째 열 행을 구체적으로 대상으로 지정하는 방법을 알 수 없습니다.

답변1

다음을 사용하는 것이 더 쉽습니다 awk.

awk '$2 ~ /^rs/ {sub(/:.*/,"",$2)} 1' file
10 10:135524264:C:G 0 135524264 C G
10 rs55726203 0 135524334 A G

답변2

sed를 언급하셨으니 이를 수행하는 한 가지 방법이 있습니다. 일반적으로 특정 구분 기호 S의 N번째 열로 이동하는 작업은 "^[^S]*S[^S]*S..."와 같이 수행됩니다. 개별 부분을 기억해야 하는 경우 선택 사항으로 둘러싸여 있습니다. 괄호. 다른 방법도 있지만 N=2이므로 이것이 가능합니다.

sed -r 's/^([^ ]* )(rs[^ :]*):[^ ]*/\1\2/' file

두 번째 열에 도달하면 "rs"로 시작하고 구분 기호 공백과 콜론 이외의 문자로 이어지는 내용만 유지합니다. 나머지 열을 삭제하지 않으려면 ':.*' 대신 ':[^ ]*'를 참고하세요.

경고: 구분 기호가 포함되지 않은 열에만 작동합니다., 귀하의 예와 같습니다. 셀에 "text"와 같이 따옴표로 묶인 이스케이프 구분 기호가 포함된 경우"리터럴 텍스트"text'를 입력하는 경우 sed나 awk 대신 전용 도구를 사용하는 것을 고려해 보세요!

관련 정보