
Ich habe ein Unix-Shell-Skript, das eine Ausgabe aus einem Protokoll generiert.
for i in HistSimBasislieferung hedgeAccountingF4PublicSend;do
report1=$(echo -n $i:)
date1=$(grep -e $i $PALME_CONF | grep "The job finished" | tail -1 | awk '{print $1,$2}'|\<br/> sed 's/^.\(.*\).$/\1/')
final="$report1 $date1"
echo "$final"
done
Im Moment sieht die Ausgabe folgendermaßen aus:
HistSimBasislieferung 2015-03-11 01:03:02
hedgeAccountingF4PublicSend 2015-03-11 00:16:34
Aber was ich will, ist so etwas wie das hier:
HistSimBasislieferung,hedgeAccountingF4PublicSend
2015-03-11 01:03:02,2015-03-11 00:16:34
Haben Sie Vorschläge, wie dies umgesetzt werden könnte?
Ich habe es so gemacht, wie du vorgeschlagen hast:
for i in HistSimBasislieferung hedgeAccountingF4PublicSend;do
echo -n $i > report_log
grep -e $i $PALME_CONF | grep "The job finished" | tail -1 | awk '{print $1,$2}' | sed 's/^.\(.*\).$/\1/' > date_log
done
cat < report_log | xargs echo | tr ' ' ',';
cat < date_log | xargs echo | tr ' ' ',';
echo "" > report_log; echo "" > date_log
aber die Ausgabe ergab:
hedgeAccountingF4PublicSend2015-03-11,00:16:34
I need it like this:
HistSimBasislieferung,hedgeAccountingF4PublicSend,
2015-03-11 03:05:40,2015-03-11 02:12:19,
Antwort1
Dieser Einzeiler sieht vielleicht hässlich aus, aber ich denke, er erfüllt seinen Zweck (wenn ich Ihren Anwendungsfall richtig verstehe).
your_shell_script.sh | cut -d ' ' -f 1 | tr '\n' ',' | sed 's/,$/\n/'; your_shell_script.sh | cut -d ' ' -f '2-' | tr '\n' ',' | sed 's/,$/\n/'
Antwort2
Es handelt sich um ein Loop-Skript, daher wird die Variable bei jeder Schleife überschrieben. Mein Vorschlag hier ist, eine Protokolldatei für den „Bericht“ und auch eine Protokolldatei für „Datum“ zu erstellen (Protokoll anhängen).
Führen Sie am Ende Ihres Skripts (direkt unter der Zeile „done“) den folgenden Befehl aus:
cat <\report_log_file> | xargs echo | tr ' ' ',';
cat <\date_log_file> | xargs echo | | tr ' ' ','
oder erstellen Sie ein weiteres Loop-Skript.
for i in <\report_log_file> <\date_log_file>; do
cat $i | xargs echo | tr ' ' ',';
done
Löschen Sie dann die Protokolldateien:
echo "" > report_log_file; echo "" > date_log_file