두 번째 콜론 뒤의 열에서 모든 내용을 제거하는 방법

두 번째 콜론 뒤의 열에서 모든 내용을 제거하는 방법

다음과 같은 약 700만 줄의 파일이 있습니다.

head gokind_SNPs.txt
1:753541:G:A
1:769223:C:G
1:771967:G:A
1:778745:A:G
1:779322:A:G
...

두 번째 콜론 뒤의 모든 항목을 어떻게 제거하여 다음과 같이 보이게 합니까?

1:753541
1:769223
1:771967
1:778745
1:779322
...

이 작업을 시도했지만 작동하지 않고 파일이 변경되지 않았습니다.

sed 's/:[A-Z].* / /g' gokind_SNPsF.txt > gokind_SNPsf.txt

답변1

awk에 포함된 문자를 제거하려면 awk를 사용하세요.

awk -F":" '{ print $1":"$2 }' gokind_SNPs.txt > gokind_SNPs_OUTPUT.txt

답변2

사용 중인 정규 표현식이 데이터에 존재하지 않는 공백을 일치시키려고 하기 때문에 명령은 아무 작업도 수행하지 않습니다.

대신에

sed 's/:[A-Z].*//' gokind_SNPsF.txt >new-gokind_SNPsf.txt

:이렇게 하면 대문자 바로 뒤에 있는 각 줄의 첫 번째 줄에 있는 모든 텍스트가 제거됩니다 . 또한 공백을 바꾸는 대신 아무것도 바꾸지 않기로 선택하고 g불필요한 플래그를 제거했습니다.

나는 당신이 가지고 있지 않다고 가정합니다실제로표시된 명령을 실행하면 시작하기 전에 데이터 파일이 잘립니다(비워집니다) sed(읽고 있는 동일한 파일로 리디렉션되기 때문에).

sed내부 편집에 사용하려면 sed -i"를 읽어보세요.sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?".

귀하의 명령보다 더 빠른 대안은 다음 sed과 같습니다.

cut -d: -f -2 gokind_SNPsF.txt >new-gokind_SNPsf.txt

:각 행에서 처음 두 개의 구분된 필드만 추출합니다. 또는 를 -f -2사용하여 처음 두 열을 가져오도록 지정할 수 있습니다 .-f 1,2-f 1-2

를 사용 awk하면 할 것입니다

awk -F : 'BEGIN { OFS=FS } { print $1, $2 }' gokind_SNPsF.txt >new-gokind_SNPsf.txt

각 줄의 처음 두 필드만 새 파일에 인쇄합니다.

GNU를 사용하면 awk다음 명령을 사용하여 제자리에서 편집할 수 있습니다.

awk -i inplace -F : 'BEGIN { OFS=FS } { print $1, $2 }' gokind_SNPsF.txt

바라보다"awk를 사용하여 파일을 변경하는 방법은 무엇입니까? ("sed -i"와 동일)"이것에 대해 자세히 알아보세요.

답변3

cut명령은 정확히 다음을 위해 설계되었습니다.

cut -d: -f-2

답변4

읽고 있는 파일에 절대로 쓰지 마십시오.

sed 's/:[A-Z].* / /' gokind_SNPsF.txt > tmp && mv tmp gokind_SNPsf.txt

sed -i또는 사용 중인 sed 버전에서 지원하는 경우 사용하세요.

관련 정보