10,000줄이 넘는 파일이 있습니다.
head samples
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192170/type/READ_SET_FASTQ/filename/HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R1.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192170/type/READ_SET_FASTQ_PE/filename/HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R2.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192171/type/READ_SET_FASTQ/filename/HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R1.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192171/type/READ_SET_FASTQ_PE/filename/HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R2.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192168/type/READ_SET_FASTQ/filename/HI.2613.007.Index_18.ED17_MO1A26-7_353_R1.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192168/type/READ_SET_FASTQ_PE/filename/HI.2613.007.Index_18.ED17_MO1A26-7_353_R2.fastq.gz.md5
https://genomequebec.mcgill.ca/nanuqMPS/readSetMd5Download/id/192169/type/READ_SET_FASTQ/filename/HI.2613.007.Index_14.ED14_IA2A35-2_310_R1.fastq.gz.md5
"HI.*"로 시작하는 각 줄의 일부만 인쇄하고 싶습니다.
이것이 내가 원하는 결과입니다:
HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R1.fastq.gz
HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R2.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R1.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R2.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R2.fastq.gz
답변1
사용awk
awk -F'/' '$NF ~ /^HI\./{ print $NF }' infile
.md5
접미사를 제거하려면 다음을 수행할 수 있습니다.
awk -F'(/|.md5)' '$(NF-1) ~ /^HI\./{ print $(NF-1) }' infile
에서는 전체 행/레코드를 참조하고 , , , , ...은 각각 첫 번째, 두 번째, 세 번째, ...를 참조하고
awk
마지막 필드를 참조하므로 두 번째 필드입니다.$0
$1
$2
$3
$NF
$(NF-1)
awk의 틸드 연산자는
~
오른쪽 연산자를 (확장) 정규 표현식으로, 왼쪽 피연산자를 문자열로 처리합니다.string ~ /regular-expression/
해결책 sed
:
sed 's:.*/\([^/]*\)\.md5$:\1: ; /^HI\./!d' infile
이는
/\([^/]*\)\.md5
마지막 슬래시 뒤에 오는 모든 항목과 일치하지만 후행 슬래시는 일치하지 않습니다.md5
.\([^/]*\)
마지막 슬래시와 ( 사이의 모든 항목을.md5
그룹으로 일치시키고 교체 섹션에 역참조를 인쇄 합니다\1
.그러면 이전 명령의 결과에서
/^HI\./!d
시작하지 않는 줄이 제거 됩니다.HI.
sed
입력에 특수 문자가 있으므로 다른
sed
구분 기호를 사용합니다.:
/
답변2
이 시도,
awk -F '/' '$NF ~ /^HI/ {print substr($NF, 1, length($NF)-4)}' file.txt
- 다음으로 시작하는 경우 마지막 필드를 인쇄합니다.
HI
- 마지막 4자를 제외
.md5
산출
HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R1.fastq.gz
HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R2.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R1.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R2.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R2.fastq.gz
HI.2613.007.Index_14.ED14_IA2A35-2_310_R1.fastq.gz
답변3
awk -F"filename/" '{gsub (".md5","");print $2}'