Anpassen eines Unix-Shell-Skripts zum Erstellen einer CSV aus einer Protokolldatei

Anpassen eines Unix-Shell-Skripts zum Erstellen einer CSV aus einer Protokolldatei

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

verwandte Informationen