簡體   English   中英

在bash中格式化回顯輸出

[英]Formatting echo output in bash

我有一個黑客腳本,該腳本正在檢查各種大型日志文件中的某些條目。 它是perl和bash的混合-工作正常-腳本可以獲取所需的內容。 唯一的問題是格式“ $ chdk_subscription”,我試圖用關鍵字“ STATS”和“ added”來分隔輸出。 這兩個詞是我要閱讀的每一行的開頭和結尾。

#!/bin/bash
pid_foo_process=$(pgrep foo_process)
check_primary=$(grep $1 /data/foo_process-0210.$pid_foo_process.log | perl -nle 'print /(primary book \w+:\w+)/ ')
check_primary_symbol=$(grep $1 /data/foo_process-0210.$pid_foo_process.log | perl -nle 'print /primary book (\w+:\w+)/ ')
chdk_subscription=$(grep $1 /data/foo_process-0210.$pid_foo_process.log | perl -nle 'print if /(subscription for \w+:\w+.*)/ ')
echo $check_primary
echo $check_primary_symbol

IFS="STAT"
while read line
echo $line
done < echo $chdk_subscription

用“ IFS”分解“ $ chdk_subscription”似乎不起作用

echo $chdk_subscription| awk -F"STATS" '{print $0}'

使用awk也不起作用-每次以大行的形式出現而沒有換行符。

STATS 10/15 08:03:09.391048 32978  (0)SB: subscription for APA:T added STATS 10/15 08:03:09.391164 32978  (0)SB: subscription for APA:P added STATS 10/15 08:03:09.391226 32978  (0)SB: subscription for APA:Z added STATS 10/15 08:03:09.391537 32978  (0)SB: subscription for APA:n added STATS 10/15 08:03:09.391599 32978  (0)SB: subscription for APA:A added STATS 10/15 08:03:09.391686 32978  (0)SB: subscription for APA:a added STATS 10/15 08:03:09.391756 32978  (0)SB: subscription for APA:K added STATS 10/15 08:03:09.391818 32978  (0)SB: subscription for APA:J added STATS 10/15 09:38:12.826928 32978 (0)SB: subscription for APA:N, XNYSAPA:3 added

我想要這樣的東西,我可以閱讀。

STATS 10/15 08:03:09.391048 32978  (0)SB: subscription for APA:T added
STATS 10/15 08:03:09.391164 32978  (0)SB: subscription for APA:P added
STATS 10/15 08:03:09.391226 32978  (0)SB: subscription for APA:Z added
STATS 10/15 08:03:09.391537 32978  (0)SB: subscription for APA:n added
STATS 10/15 08:03:09.391599 32978  (0)SB: subscription for APA:A added
STATS 10/15 08:03:09.391686 32978  (0)SB: subscription for APA:a added
STATS 10/15 08:03:09.391756 32978  (0)SB: subscription for APA:K added
STATS 10/15 08:03:09.391818 32978  (0)SB: subscription for APA:J added
STATS 10/15 09:38:12.826928 32978  (0)SB: subscription for APA:N, XNYSAPA:3 added

您最好使用臨時文件,而不是將多行讀入bash變量。

temp_file=$(mktemp)

if [ 0 -eq $? ]; then
  trap 'rm -f -- "${temp_file}"' 0
else
  echo "Unable to create temporary file!"
  exit 1
fi

# Fill temporary file.
pid_foo_process=$(pgrep foo_process)
grep $1 /data/foo_process-0210.${pid_foo_process}.log | perl -nle 'print /(primary book \w+:\w+)/ ' >>"${temp_file}"
grep $1 /data/foo_process-0210.${pid_foo_process}.log | perl -nle 'print /primary book (\w+:\w+)/ ') >>"${temp_file}"
grep $1 /data/foo_process-0210.${pid_foo_process}.log | perl -nle 'print if /(subscription for \w+:\w+.*)/ ' >>"${temp_file}"

# Print contents.
while read line
  echo "${line}"
done < "${temp_file}"

請注意,腳本完成后,頂部的trap語句將自動刪除臨時文件。

awk 'BEGIN { RS=" ?STATS "} NR > 1 {print "STATS "$0}'

RS =“?STATS”是分隔符,捕獲任何STATS,在他之后有一個空格,在他之前有零至一個空格。 該分隔符將導致第一個空記錄。 NR是記錄號,因此NR> 1將忽略第一條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM