Schreibe das Ergebnis für jedes Dateipaar im Verzeichnis in eine Datei

Schreibe das Ergebnis für jedes Dateipaar im Verzeichnis in eine Datei

Ich möchte den Befehl für jedes Dateipaar im Verzeichnis ausführen und ein Ergebnis in eine Datei schreiben. Ich möchte eine Matrix NxN der Ergebnisse erhalten. Ich habe angefangen:

for file1 in some_directory/*.txt; 
do 
    filename1=$(basename "$file1")
    for file2 in some_directory/*.txt; 
    do 
        //here python script should be run 
        python script.py file1 file2
        //and result should be written to file, seperate by space
    done
    //here should be new line
done

Leider kenne ich Bash nicht. Kann mir jemand helfen, es fertigzustellen? Vielen Dank im Voraus

Antwort1

Probieren Sie Folgendes aus:

#!/bin/bash --
(cd some_directory ;\
 for file1 in *.txt ; do
   for file2 in *.txt ; do
#    here python script should be run
     printf "%s " "$(python /path/to/script.py "${file1}" "${file2}")"
   done
   printf "\n"
 done ) > result.file

Notiz: /path/to/script.pymuss durch den vollständigen Pfadnamen des Skripts ersetzt werden script.py.

Der gesamte Block ist in eingeschlossen (...). Alle darin enthaltenen Befehle werden in einer Subshell ausgeführt. Dies wird verwendet, um die Ausgabe zu gruppieren und zu erfassen und alle Befehle in auszuführen some_directory, dank der ersten Zeile mit cddem Befehl.

"${file1}"und "${file2}"werden verwendet, um die Werte dieser Variablen sicher zu referenzieren.

"$( ... )"führt den Befehl darin aus und gruppiert die Ausgabe dank der Anführungszeichen in einer einzigen Zeichenfolge.

printf "%s " "$( ... )"druckt das Ergebnis des pythonSkripts mit einem zusätzlichen Leerzeichen.

printf "\n"druckt eine neue Zeile.

> result.fileleitet die gesamte Ausgabe, die mit allen Befehlen innerhalb der Subshell generiert wird, in die Datei result.fileim aktuellen Verzeichnis um.

Es wurde mit ungewöhnlichen Dateinamen getestet und scheint sicher zu sein.

verwandte Informationen