ファイル:
timestamp1 KKIE ABC=123 [5454] GHI=547 JKL=877 MNO=878
timestamp2 GGHI ABC=544 [ 24548] GHI=883 JKL=587 MNO=874
timestamp3 GGGIO ABC=877 [3487] GHI=77422 JKL=877 MNO=877
timestamp4 GGDI ABC=269 [ 1896] GHI=887 JKL=877 MNO=123
注: '[' と次の数字の間にスペースがある場合があります)。
JKL=877 の場合、timestampx、ABC、GHI が必要
解決策 1:
timestamp1 ABC=123 GHI=547
timestamp3 ABC=877 GHI=77422
timestamp4 ABC=269 GHI=887
解決策 2 (最良の方法):
TIMESTAMP ABC GHI
timestamp1 123 547
timestamp3 877 77422
timestamp4 269 887
これらの値を個別に取得する方法は知っていますが、すべてを一度に取得することはできません。
A. 解決策 1:
grep JKL=877 file | awk '{print $1}'
grep JKL=877 file | grep -o '.ABC=[0-9]\{3\}'
grep JKL=877 file | grep -o '.GHI=[0-9]\{3,5\}'
「[」の問題がなければ、次のようにします。
grep JKL=877 | awk '{print $1,$3,$5}' file
B. ソリューション 2 の場合:
grep JKL=877 file | grep -o '.ABC=[0-9]\{3\}' | tr 'ABC=' ' ' | awk '{print $1}'
(私は awk を使用して、tr 関数によって作成されたスペースを削除します)
grep JKL=877 file | grep -o '.GHI=[0-9]\{3,5\}' | tr 'ABC=' ' ' | awk '{print $1}'
「[」の問題がなければ、次のようにします。
printf "TIMESTAMP ABC GHI\n";
awk '{print $1,$3,$5}' file | tr 'ABC=' ' ' | tr 'GHI=' ' '
C.すべてを一度にまとめるために、ループを考えて変数に一致を入れていました(https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-を参照)パターン):
MATCH=".ABC=[0-9]\{3\} .GHI=[0-9]\{3,5\}"
しかし、私の構文に何か問題があります。さらに、timestampx は含まれません。
printf "TIMESTAMP ABC GHI\n"
grep JKL=877 file | while read line
do
?
done
助けてくれてありがとう。