3

私は Linux を初めて使用し、抽出する非常に大きなテキスト ログ ファイルを持っています。私はbashを使うと思った?

たとえば、ファイルには次のものが含まれます。

Node:xyz
Time:01/07/13 14:26:17
INFO: Trusted certif ok

Node:abc
Time:01/07/13 14:26:18
INFO: Trusted certif ok

Node:def
Time:01/07/13 14:26:18
INFO: Trusted certif not ok

Node: の後のテキストを抽出し、それを Info: の後のテキストに追加して、1 行に表示し、出力を新しいファイルにリダイレクトする必要があります。awk と sed を試していますが、まだわかりません。大変助かりました。

出力例は次のようになります。

xyz Trusted certif ok
abc Trusted certif ok
dbf Trusted certif not ok
4

4 に答える 4

12

これをやってみてください:

awk -F: '/^Node/{v=$2}/^INFO/{print v $2}' file.txt

で:

while IFS=: read -r c1 c2; do
    [[ $c1 == Node ]] && var=$c1
    [[ $c1 == INFO ]] && echo "$var$c2"
done < file.txt

で:

perl -F: -lane '
    $v = $F[1] if $F[0] eq "Node";
    print $v, $F[1] if $F[0] eq "INFO"
' file.txt

で(ファイル内、使用法:)./script.py file.txt

import sys
file = open(sys.argv[1])
while 1:
    line = file.readline()
    tpl = line.split(":")
    if tpl[0] == "Node":
        var = tpl[0]
    if tpl[0] == "INFO":
        print var, tpl[1]
    if not line:
        break
于 2013-01-07T22:14:10.413 に答える
2

sed を使用:

sed -n '/^Node/N;/Time/N;s/^Node:\([^\n]*\)\n[^\n]*\n[^ ]* /\1 /p' input
于 2013-01-07T22:17:35.810 に答える
0
sed -n 'N;N;s/\n.*\n/ /;s/\S*://g;p;n' file
于 2013-05-28T08:46:43.753 に答える
0
perl -F: -lane '$x=$F[1] if(/^Node:/);if(/^INFO:/){print "$x".$F[1];}' your_file

以下でテスト:

> cat temp
Node:xyz
Time:01/07/13 14:26:17
INFO: Trusted certif ok

Node:abc
Time:01/07/13 14:26:18
INFO: Trusted certif ok

Node:def
Time:01/07/13 14:26:18
INFO: Trusted certif not ok

> perl -F: -lane '$x=$F[1] if(/^Node:/);if(/^INFO:/){print "$x".$F[1];}' temp
xyz  Trusted certif ok
abc  Trusted certif ok
def  Trusted certif not ok
于 2013-01-08T11:06:22.993 に答える