
다음과 같은 약 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
(읽고 있는 동일한 파일로 리디렉션되기 때문에).
sed
use 를 사용 하여 내부 편집을 수행하고 싶지만 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 버전이 지원하는 경우 사용하십시오.