
Ich habe einige Verzeichnisse, die eine ähnlich benannte Datei enthalten, z. B. (*Sample_name*.base.coverage.txt). Und ich möchte alle *base.coverage.txt-Dateien zusammenfügen. Ich habe etwas geschrieben, aber es ist nicht ganz richtig, da ich nicht glaube, dass ich sie tatsächlich zusammenfüge.
cd /g/bo/vir/analysis
find -type d |
while read dir; do
if [ -f $dir/*.base.coverage.txt ]; then
paste $dir/*.base.coverage.txt >> paste_all_l30.p90.base.cov.norm
fi
done
Ich denke auch über eine andere Loop-Methode nach, bin mir aber nicht sicher, wie ich die Liste der Verzeichnisse in ein Array bekomme.
for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm
Irgendeine Hilfe? Danke
Antwort1
Versuche dies:
find . -type f -name '*.base.coverage.txt' \
| xargs paste > paste_all_l30.p90.base.cov.norm
Dies funktioniert, solange nicht zu viele Dateien vorhanden sind. Wenn es viele Dateien sind, dann Folgendes:
touch paste_all_l30.p90.base.cov.norm
for file in `find . -type f -name '*.base.coverage.txt'`; do
paste paste_all_l30.p90.base.cov.norm $file > tmp
mv tmp paste_all_l30.p90.base.cov.norm
done
Antwort2
Versuche dies:
find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;
Antwort3
Am einfachsten können Sie mehrere Verzeichnisse rekursiv durchsuchen, indem Sie ein kurzes Python-Skript schreiben und die os.path.walk
Funktion verwenden, um die verschachtelten Verzeichnisse rekursiv zu durchsuchen. Zum Anhängen können Sie shutil.copyfileobj
innerhalb der Schleife Dateinamen mit einem regulären Ausdruck überprüfen.