我正在尝试从多个日志文件获取第一行和第二行到最后一行,这些日志文件具有不同的行号。同时在显示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或这些命令的任意组合来完成?
答案 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标志替换$-
。)