我希望每次在我的文件中都有包含模式“黄色”的行,它会删除此行和前面的4行。
示例,我的文件:
orange
green
grey
black
blue
yellow
red
green
grey
white
black
yellow
blue
输出文件为:
orange
red
blue
非常感谢。如果可能的话,使用unix标准命令,如awk,sed,cut,grep,perl脚本,php脚本,python脚本......(我的输入文件非常大,差不多2Gb,2500万行)
答案 0 :(得分:5)
使用tac
和awk
:
tac file | awk '/yellow/{p=5} !p--' | tac
orange
red
blue
tac
- 反向连接和打印文件awk
命令将计数器设置为5并跳过下一行的打印答案 1 :(得分:2)
来自命令行的perl,
perl -ne'
push @r, $_;
@r = () if /^yellow$/;
print eof() ? @r : @r >=5 ? shift @r : "";
' file
输出
orange
red
blue
答案 2 :(得分:1)
另一个awk
:
awk '{a[++c]=$1}/yellow/{for(i=1;i<=c-5;i++){print a[i]};c=0;delete a}END{for(i=1;i<=c;i++){print a[i]}}' file