使用bash从文件中提取文本

使用bash从文件中提取文本,bash,sed,awk,perl,python,Bash,Sed,Awk,Perl,Python,我是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:

我是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:之后的文本,以便在一行上显示,并将输出重定向到新文件。我正在尝试awk和sed,但还没有找到答案。非常感谢你的帮助

示例输出如下所示:

xyz Trusted certif ok
abc Trusted certif ok
dbf Trusted certif not ok
尝试这样做:

在:

在(文件中,用法:
/script.py file.txt
):

使用sed:

sed -n '/^Node/N;/Time/N;s/^Node:\([^\n]*\)\n[^\n]*\n[^ ]* /\1 /p' input
测试如下:

> 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

非常感谢大家。awk很棒,您的帮助也很棒。@EdMorton:纯
bash
解决方案有什么问题?@TrueY shell是一个调用工具的环境。它具有编程语言构造(循环等),可以帮助您对调用工具的顺序进行排序。它不是一个解析文本文件的工具,所以它的解析能力非常有限,而且它的副作用也不明显。例如,由于
read
缺少
-r
参数,您发布的脚本将错误地解释反斜杠,使用echo只能在某些输入系统上工作。可能还有其他的边缘情况它失败了,并且它的长度是健壮的awk脚本的两倍以上。@EdMorton:明白了!谢谢@坎菲斯:试试看
perl -F: -lane '
    $v = $F[1] if $F[0] eq "Node";
    print $v, $F[1] if $F[0] eq "INFO"
' 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
sed -n '/^Node/N;/Time/N;s/^Node:\([^\n]*\)\n[^\n]*\n[^ ]* /\1 /p' input
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
sed -n 'N;N;s/\n.*\n/ /;s/\S*://g;p;n' file