2016-07-12 15 views
0

Also ich habe dieses Problem: Ich habe einen Ordner in meinem Ubuntu, der Protokolldateien enthält. Das Benennungsmuster aller Dateien lautet wie folgt:Bash - Filterdateien im Ordner

d .exert. de -access.log- 2016-06-28

Es gibt viele Dateien. Ich habe fett hervorgehoben, welcher Teil des Namens variieren kann. Es gibt immer zwei Dateien für ein bestimmtes Datum und eine Domäne (.de, .co.uk, .dk usw.), von denen einer mit d1 und der andere mit d2 vorangestellt ist. Ich brauche d1 und d2 Dateien für jedes Datum und die Domäne, beispielsweise concat:

1) d1.exert.de_access.log_2016-06-28 
2) d1.exert.dk_access.log_2016-06-24 
3) d1.exert.dk_access.log_2016-06-25 
4) d2.exert.de_access.log_2016-06-28 
5) d2.exert.dk_access.log_2016-06-24 
6) d2.exert.dk_access.log_2016-06-25 

Ich brauche zu paaren und concat Dateien: 1) und 4), 2) und 5), 3) und 6), weil Sie haben dieselbe Domain und dasselbe Datum, aber andere Präfixe.

Also muss ich alle Dateien im Ordner durchgehen und diese d1/d2-Paare für jedes Datum und jede Domäne finden. Dann muss ich diese Paare zusammenführen. Ich muss ein Skript schreiben, das diese Paare automatisch findet. Ich dachte über eine Art Doppelschleife nach (z. B. die äußere Suche sucht nach dem Datum, und die innere sucht nach der Domäne), aber ich habe keine Ahnung, wie ich das erreichen soll. Oder vielleicht gibt es eine einfachere Lösung?

+0

Eine Randbemerkung: 'zcat' kann nicht für nicht gzip verwendet werden Format, –

Antwort

0

Sie können sortieren Befehl, um sie zu sortieren, dann cat Befehl, um sie zusammenzuführen.

Beispiel:

# sort all files 
ls *novono* | sort | sort -t '_' -k 3 > files 
# get all dates 
DATES=`cat files | sed 's/...www.novonordiskpro..._access.log_//' | uniq` 
# merge files 
for DATE in $DATES; do cat `grep $DATE files` > merge-$DATE; done 
+0

Könnten Sie bitte Ihr Skript Zeile für Zeile ausarbeiten? Wie fusioniert es nach Datum und nach Domain? Nehmen wir an, ich möchte Dateien vom 2016-06-25 zusammenführen, aber nur für die .de-Domain. Werden Sie nicht alle Dateien aus diesem Datum zusammenführen, auch mit anderen Domänen als .de? – Patryk

0

Unter der Annahme, dass die Dateien immer gepaart sind:

ls -1 | sort -t\. -k 2 -k 1 | xargs -L2 your_command 

Dadurch werden die Dateien sortieren, um sicherzustellen, dass die passenden Paare einander folgen und your_command rufen Sie dann mit genau zwei Argumente .

0

script.sh "FolderPath"

#! /bin/bash 

cd $1; 
for i in `ls | awk -F"." '{sz=$2"."$3"."$4"."$5; print sz}' | sort | uniq` 
do 
    file_d1=d1"."$i; 
    file_d2=d2"."$i; 

    #echo $file_d1; 
    #echo $file_d2; 

    cat $file_d1 >> $i; 
    cat $file_d2 >> $i; 

done 

Finale verketteten Dateien speichern wird bei "FolderPath" mit folgenden Dateinamen:

www.novonordiskpro.<domain>_access.log_<date> 
Example: 
www.novonordiskpro.dk_access.log_2016-06-24 
www.novonordiskpro.dk_access.log_2016-06-25