打印第一个和第二个到多个文件的最后一行

时间:2016-06-01 13:32:54

标签: awk sed

我正在尝试从多个日志文件获取第一行和第二行到最后一行,这些日志文件具有不同的行号。同时在显示content.Sample文件内容之前显示指示日志文件名,如下所示;

Process started
log entries here...
...........
...........
Process successful
Process ended

我想要实现的所需输出如下所示;

05302016.log
Process started
Process successful
05312016.log
Process started
Process successful

如何使用awk,sed,head,tail或这些命令的任意组合来完成?

4 个答案:

答案 0 :(得分:1)

for file in *.log
    do
echo "$file"
head -1 "$file"
tail -2 "$file" |head -1


    done

结果:

05302016.log
Process started1
Process successful1
05312016.log
Process started2
Process successful2

答案 1 :(得分:1)

这可以根据您处理空文件和少于3行的文件的要求执行您想要的操作。使用ENDFILE的GNU awk:

awk '
FNR==1 { first=$0 }
{ secondLast=prevLine; prevLine=$0 }
ENDFILE { print FILENAME ORS first ORS secondLast }
' *

其他问题:

awk '
FNR==1 {
    if (NR>1) {
        print prevFname ORS first ORS secondLast
    }
    prevFname = FILENAME
    first = $0
}
{ secondLast=prevLine; prevLine=$0 }
END {
    print FILENAME ORS first ORS secondLast
}
' *

答案 2 :(得分:0)

快速而肮脏:

[NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType]

答案 3 :(得分:0)

ed可能比sed更容易。如果您的所有文件至少有两行:

#!/bin/sh
nl=$'\n'
for i in *
do
    echo "$i"
    ed -s <<EOF
r $i
1p
\$-p
Q
EOF
done

(注意,在here-document中我必须转义用于选择倒数第二行的$ - 否则shell将用活动shell标志替换$-。)