我有一个超过 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 中的tild
~
运算符将右侧运算符视为(扩展)正则表达式,将左侧操作数视为字符串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}'