在目录的所有文件中搜索字符串的前3名和后3名出现并将结果输出到文件的最佳方法是什么?
我目前正在用2条命令执行此操作。但是有更好的方法吗?
grep string path-to-file | head -3 > out.log
grep string path-to-file | tail -3 >> out.log
在目录的所有文件中搜索字符串的前3名和后3名出现并将结果输出到文件的最佳方法是什么?
我目前正在用2条命令执行此操作。但是有更好的方法吗?
grep string path-to-file | head -3 > out.log
grep string path-to-file | tail -3 >> out.log
这可以在单个awk调用中完成,例如:
awk -v n=3 '
FNR == 1 && NR != 1 {
i = ((c - n) >= n ? c - n : n) + 1
for (; i <= c; i++)
print m[i]
c = 0
delete m
}
/pattern to match/ {
c++
if (c <= n)
print
else {
delete m[c - n]
m[c] = $0
}
}
END {
i = ((c - n) >= n ? c - n : n) + 1
for (; i <= c; i++)
print m[i]
}' *
,
如果您仍然感兴趣:
try except
想法是:
我现在无法访问计算机,稍后我将对其进行检查并在必要时进行修复
,这可能对您有用(GNU sed):
sed -nE '/PATTERN/H;$!d;x;s/^((\n[^\n]*){3}).*((\n[^\n]*){3})$/\1\3/;s/.//p' file
聚集在保留空间中和文件末尾包含PATTERN
的行,交换到保留空间,删除前三行和后三行之间的任何行,删除引入的换行符,如果成功则打印