두 번째 열에 잘라야 할 일부 행이 있는 대용량 파일이 있습니다. 현재:
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 대신 전용 도구를 사용하는 것을 고려해 보세요!