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
では、行全体/レコードを参照し、、、、、...はそれぞれ最初、2番目、3番目、...を参照し、最後のフィールドを参照する
awk
ため、2番目のフィールドです。$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}'