특정 문자로 시작하는 각 줄의 부분만 인쇄하는 방법

특정 문자로 시작하는 각 줄의 부분만 인쇄하는 방법

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}'

관련 정보