6000개의 열이 포함된 유전 데이터 파일이 있습니다 gen.gz
. 데이터는 다음과 같습니다:
1 1:13380:C:A 13380 C A
두 번째 열을 다음과 같이 편집하고 싶습니다.
1 1:13380 13380 C A
두 번째 열에서 4자를 제거하고 싶습니다.
입력은 gen.gz
파일이고 출력이 동일하기를 원합니다.
답변1
필드가 공백 문자로 구분되어 있다고 가정하면 파일의 압축을 풀고 awk
수정을 위해 가져온 다음 결과 데이터를 새 파일 이름으로 압축할 수 있습니다. 이는 압축되지 않은 데이터를 디스크에 저장하지 않고 단일 파이프라인에서 수행할 수 있습니다. 작업이 완료된 후 결과를 확인하고 정상으로 보이면 원래 결과를 교체하십시오.
gzip -d -c gen.gz |
awk '{ sub(":[^:]*:[^:]*$", "", $2); print }' |
gzip -c >new-gen.gz
# look at new-gen.gz, and then
mv new-gen.gz gen.gz # only if you want to discard the original data!
이 awk
코드는 다양한 방법으로 수행될 수 있습니다. :
제안한 대로 마지막 4자를 제거하는 대신 두 번째 필드에서 마지막 2개의 구분된 문자열을 제거하기 로 결정했습니다 . 항상 문자가 하나만 있는 경우 :[^:]*:[^:]*$
정규식을 다음과 같이 작성할 수 있습니다 :.:.$
.
압축 파일의 데이터를 수정하고 있으므로 파일을 그 자리에서 실제로 편집할 수는 없습니다( 에서처럼 sed -i
).