Ich habe ein Bash-Skript, das versucht, eine durch Tabulatoren getrennte Datei zu konvertieren und in eine kommagetrennte Datei zu konvertieren. Das folgende Skript friert, wenn ich in ‚/tmp/filename.txt‘ passieren:Sed übergibt Dateinamen von Bash, aber friert ein
#!/bin/bash
sed 's/ /,/g' $1 > /tmp/csvFile.csv
jedoch verhält sich das Skript richtig, wenn ich die Dateinamen explizit erklären:
#!/bin/bash
sed 's/ /,/g' /tmp/filename.txt > /tmp/csvFile.csv
Ich brauche dieses Skript zu sein Der Dateiname kann als Befehlszeilenargument verwendet werden, sodass er wiederverwendbar ist. Kann mir jemand sagen, was ich falsch mache?
EDIT:
My $ 1 betrug leer, mein obiges Problem verursacht. Ich verstehe immer noch nicht, warum $ 1 leer war. Hier ist die vollständige Skript:
#!/bin/bash
function main {
splitCSV
cat /tmp/output.txt
}
function splitCSV {
sed 's/ /,/g' $1 > /tmp/csvFile.csv
awk -F ',' 'NR > 1 !($2 in facilities) { facilities[$2] } END { for (x in facilities) print x }' /tmp/csvFile.csv > /tmp/output.txt
}
main
Ich nehme an, das eine Art von Umfang Problem ist?
Sind Sie sicher, '$ 1' ist nicht leer? – anubhava
Sie hatten Recht. $ 1 war leer. Aber ich verstehe nicht, warum es leer war. Ich habe meinen ursprünglichen Beitrag zu diesem Problem bearbeitet. – OnlyDean
Wie rufen Sie das Skript an? Und Funktionen haben ihre eigenen Argumente. Führen Sie diesen Code über http://www.shellcheck.net/ aus, um Vorschläge zur Behebung des Problems zu erhalten. –