मैं फ़ाइलों को मर्ज करने का एक तरीका ढूंढ रहा हूं जो फ़ाइल नाम में पहले अंडरस्कोर से पहले वही आईडी है। आउटपुट में केवल ID, उसके बाद fastq.gz होना चाहिए। आउटपुट gzipped होना चाहिए।

में

0394_L007_R1.fastq.gz 
0394_L008_R1.fastq.gz 
0444_L005_R1.fastq.gz 
0444_L006_R1.fastq.gz 

बाहर

0394.fastq.gz
0444.fastq.gz

इससे अधिक सुविधाजनक कुछ:

cat 0394_L007_R1.fastq.gz  0394_L008_R1.fastq.gz   > 0394.fastq.gz
0
user2300940 24 अप्रैल 2018, 19:31

3 जवाब

सबसे बढ़िया उत्तर

एक साधारण लूप जो लक्ष्य फ़ाइल में जुड़ता रहता है। तो यह वास्तव में वर्तमान फ़ाइल के लिए सही "लक्ष्य फ़ाइल" खोजने और उसमें संलग्न करने की बात है।

#! /bin/bash
for x in *.fastq.gz; do
     currid=$(echo "$x" | cut -d'_' -f1)
     cat "$x" >> "$currid".fastq.gz
done
2
Vasan 24 अप्रैल 2018, 21:16

सबसे पहले, एक सहयोगी सरणी में अद्वितीय पहचानकर्ता एकत्र करें:

declare -A ids
for f in *.fastq.gz; do
  ids[${f%%_*}]=1
done

फिर gzcat प्रत्येक की (असम्पीडित) सामग्री को पाइप करने के लिए उपयोग करें एक फ़ाइल में आउटपुट को फिर से संपीड़ित करने के लिए gzip से मेल खाने वाली फ़ाइल।

for id in "${!ids[@]}"; do
  gzcat "$id"_*.fastq.gz | gzip -c > "$id".fastq.gz
done

(या, क्योंकि मैं भूल गया था कि संयोजित Gzip फ़ाइलें स्वयं मान्य Gzip फ़ाइलें हैं,

for id in "${!ids[@]}"; do
  cat "$id"_*.fastq.gz > "$id".fastq.gz
done

)

2
chepner 24 अप्रैल 2018, 21:14

एक साधारण कमांड का उपयोग करना:

एलएस | टीआर '_' '।' | कट-डी'।' -एफ1,4,5 | यूनीक्यू

1
allweb07 24 अप्रैल 2018, 20:04