ログファイルから CSV を作成するための Unix シェル スクリプトの調整

ログファイルから CSV を作成するための Unix シェル スクリプトの調整

ログから出力を生成する Unix シェル スクリプトがあります。

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

現時点での出力は次のようになります。

HistSimBasislieferung 2015-03-11 01:03:02
hedgeAccountingF4PublicSend 2015-03-11 00:16:34

しかし、私が望んでいるのは次のようなものです:

HistSimBasislieferung,hedgeAccountingF4PublicSend
2015-03-11 01:03:02,2015-03-11 00:16:34

これを実現する方法について何か提案はありますか?


私はあなたが提案した方法でそれをやりました:

   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

しかし、出力は次のようになりました:

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,

答え1

このワンライナーは見た目は醜いかもしれませんが、目的は達成できると思います (ユースケースを正しく理解していれば)。

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/'  

答え2

これはループ スクリプトなので、ループごとに変数が上書きされます。ここでの私の提案は、「レポート」用のログ ファイルと「日付」用のログ ファイルも作成することです (ログを追加)。

スクリプトの最後 (「done」行のすぐ下) で、以下のコマンドを実行します。

cat <\report_log_file> | xargs echo | tr ' ' ',';
cat <\date_log_file> | xargs echo | | tr ' ' ','

または別のループ スクリプトを作成します。

for i in <\report_log_file> <\date_log_file>; do
   cat $i | xargs echo | tr ' ' ',';
done

次に、ログファイルをクリアします。

echo "" > report_log_file; echo "" > date_log_file

関連情報