2017-02-04 9 views
1

grep(またはawk)でbashに関する質問があります。私はTOTALの行にDelayのインスタンスを1つずつ取得しようとしています。したがって、以下の場合は、0の5つのインスタンスになります。一致したこれらのインスタンスは、各インスタンスがそれ自身の新しい行である新しいファイルにパイプされることもあります。テキストファイルとパイプを新しいファイルに一致させる

Timestamp   Stream Packets Losses Misorder  Rate Delay 
17/02/01.10:58:26 stream_0  625  0  0 5.00 M 38473.2 F 
17/02/01.10:58:26 TOTAL       625  0  0 5.00 M 
------------------------------------------------------------------------------------- 
17/02/01.10:58:27 stream_0  625  0  0 5.00 M 38473.2 
17/02/01.10:58:27 TOTAL       625  0  0 5.00 M 
------------------------------------------------------------------------------------- 
17/02/01.10:58:28 stream_0  625  0  0 5.00 M 38473.2 F 
17/02/01.10:58:28 TOTAL       625  0  0 5.00 M 
------------------------------------------------------------------------------------- 
17/02/01.10:58:29 stream_0  625  0  0 5.00 M 38473.2 
17/02/01.10:58:29 TOTAL       625  0  0 5.00 M 
------------------------------------------------------------------------------------- 
17/02/01.10:58:30 stream_0  625  0  0 5.00 M 38473.3 
17/02/01.10:58:30 TOTAL       625  0  0 5.00 M 
------------------------------------------------------------------------------------- 

だから私は(< -thisでdenoded)は、次の試合を探しています:出力ファイルの

Timestamp   Stream Packets Losses Misorder  Rate Delay 
17/02/01.10:58:26 stream_0  625  0  0 5.00 M 38473.2 F 
17/02/01.10:58:26 TOTAL       625  0  0(<-this) 5.00 M 
------------------------------------------------------------------------------------- 

例(ファイル名は関係ありません):

0 
0 
0 
0 
0 

を私はJavaScriptのプログラマーですが、私はbashでこれを行うことが許されています! awk

+0

'awk'は' grep'よりも優れています。 – Barmar

+0

@Barmar awkで更新されました(本当に問題ありません)。 –

+0

あなたの質問にどこにでも質問はありません。あなたがしたいことの説明だけです。いくつかのコードを投稿してください。 – Barmar

答えて

1

、あなたはTOTALを含む行でフィルタリング、および第五列印刷することができます。

awk '/TOTAL/ { print $5 }' > file.txt 
+0

ありがとう、完璧:)(ファイルをパイプで更新しました) –

0

をあなたにも、すべてのバッシュ・ソリューションを行うことができます。

regex="TOTAL[[:blank:]]+([[:digit:]]+)[[:blank:]]+([[:digit:]]+)[[:blank:]]+([[:digit:]]+)" 
while IFS= read -r line || [[ -n "$line" ]]; do 
    if [[ "$line" =~ $regex ]] 
    then 
     echo "${BASH_REMATCH[3]}" 
    fi 
    done <file >output_file 

それとも、ただ試合をTOTAL、スペースにフィールドを分割して配列に入れ、第4フィールドを印刷します。

while IFS= read -r line || [[ -n "$line" ]]; do 
    if [[ "$line" =~ TOTAL ]] 
    then 
     arr=($line) 
     echo "${arr[4]}" 
    fi 
    done <file >output_file 
関連する問題