Ich habe etwa 10k (ca. 180x50x2) CSV-Dateien, die ich wie folgt zusammenfügen möchte, aber die innere for-Schleife schlägt aus irgendeinem Grund fehl syntax error
; ich kann den Fehler nicht sehen inlastFile
#!/bin/bash
dir='/home/masi/CSV/'
targetDir='/tmp/'
ids=(118 119 120)
channels=(1 2)
for id in ids;
do
for channel in channels;
# example filename P209C1T720-T730.csv
lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"
# show warning if last file does not exist
if [[ -f $lastFile ]]; then
echo "Last file "$lastFile" is missing"
exit 1
fi
filenameTarget="$targetDir'P'$id'C'$channel'.csv'"
cat $dir'P'$id'C'$channel'T'*'.csv' > $filenameTarget
done;
done
Fehler
makeCSV.sh: line 12: syntax error near unexpected token `lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"'
makeCSV.sh: line 12: ` lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"'
Betriebssystem: Debian 8.5
Linux-Kernel: 4.6 Backports
Antwort1
do
In Ihrer zweiten For-Schleife fehlt Folgendes :
for id in ids;
do
for channel in channels; do # <----- here ----
# example filename P209C1T720-T730.csv
lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"
# show warning if last file does not exist
if [[ -f $lastFile ]]; then
echo "Last file "$lastFile" is missing"
exit 1
fi
filenameTarget="$targetDir'P'$id'C'$channel'.csv'"
cat $dir'P'$id'C'$channel'T'*'.csv' > $filenameTarget
done;
done
Aufgrund der Diskussion in den Kommentaren erkenne ich, dass Sie hinsichtlich der Syntax der for
Schleife verwirrt sind.
Dies ist die grobe Syntax der for
Schleife:
for name in list; do commands; done
do
Vor Befehlen muss immer ein stehen und nach den Befehlen ein ;
(oder ein Zeilenumbruch) .done
Hier ist eine Variante mit mehr Zeilenumbrüchen:
for name in list
do
commands
done
Antwort2
Es funktioniert einwandfrei:
#!/bin/bash
dir='/home/masi/CSV/'
targetDir='/tmp/'
ids=(118 119 120)
channels=(1 2)
for id in ids ; do
# Add do after ';'
for channel in channels ; do
# example filename P209C1T720-T730.csv
lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"
# show warning if last file does not exist
if [[ -f $lastFile ]] ; then
echo "Last file "$lastFile" is missing"
exit 1
fi
filenameTarget="$targetDir'P'$id'C'$channel'.csv'"
cat $dir'P'$id'C'$channel'T'*'.csv' > $filenameTarget
done
done
Verwenden Sie in Zukunft den Bash-Debugger:bash -x /Pfad/zu/Ihrem/Skript.