2017-11-07 2 views
0

私はこのような形式のログファイルがありますように連続したテキスト行をさまざまな変数に読み込みますか?

$ cat log.txt 
-- 
John Smith 
12.34.56.78 
Mon Nov 06, 2017 6:48 pm 
-- 
Jane Doe 
23.34.56.78 
Mon Nov 06, 2017 6:49 pm 

...と、数千回。常に4行のグループになります。

各行を特定の変数に読み込むことができるループを作成しようとしています。そのため、各グループでこれを繰り返します。

これが動作していないが、私は(エコーは、それが正しく動作確認することだけです)、私は正しい軌道に乗ってよ願っています:

while read separator username ip datetime; do 
    echo "separator: [$separator]" 
    echo "username: [$username]" 
    echo "ip: [$ip]" 
    echo "datetime: [$datetime]" 
done < log.txt 

どのように私は、各全体テキスト行を参照するreadを変更しません単一の変数として?次に、別の変数として次の行ですか?

ありがとうございます。

編集:うわー、他の誰かがこれが「既存の質問の正確な複製」と判断する前に、最初にそれを読むのはどうですか?そうではありません。

+0

いいえ、そのページに表示されているものは私の場合と一致しません。とにかくありがとう。 :) – teracow

答えて

1
while mapfile -t -n 4 blocks && ((${#blocks[@]})); do 
    echo "separator: [${blocks[0]}]" 
    echo "username: [${blocks[1]}]" 
    echo "ip: [${blocks[2]}]" 
    echo "datetime: [${blocks[3]}]" 
done < log.txt 
+0

ああ、配列。良いアイデア。私は前に 'mapfile'を使ったことはありませんでしたので、今すぐ始めましょう。 :D – teracow

関連する問題