두 번째 콜론 뒤에 있는 열의 모든 내용을 어떻게 제거합니까?

두 번째 콜론 뒤에 있는 열의 모든 내용을 어떻게 제거합니까?

다음과 같은 약 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 -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(읽고 있는 동일한 파일로 리디렉션되기 때문에).

seduse 를 사용 하여 내부 편집을 수행하고 싶지만 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 버전이 지원하는 경우 사용하십시오.

관련 정보