
다음과 같은 약 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 버전에서 지원하는 경우 사용하세요.