特定の文字で始まる各行の部分のみを印刷する方法

特定の文字で始まる各行の部分のみを印刷する方法

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区切り文字を使用します。:/

おすすめ記事