忽略文件Linux中的前几行和最后几行

时间:2015-06-22 09:44:25

标签: linux awk

我有一个这样的文件,除了linux中的前两行和后三行外,我想打印$0。尝试awk命令,但没有运气,有没有选择我使用以下命令 - 我想我做错了什么,但不能用我在计算机科学方面的最小经验弄清楚它是什么。

  awk '{if(NR>2){c++}else if(FNR<=c-3){print $0}}' samplefile.out > sampleout.txt

entry0 45
entry0 42
entry1 41
entry2 78
entry3 89
entry4 68
entryn 58
entryn 33
etnryn 52

由于

4 个答案:

答案 0 :(得分:4)

awk无法向前看,所以你必须保存这些行。

awk 'NR>2{if(z!="")print z;z=y;y=x;x=$0}' file

实际上零内存开销

答案 1 :(得分:3)

您可以结合使用headtail

来完成此操作
tail -n +2 samplefile.out | head -n -3 > sampleout.txt

答案 2 :(得分:2)

试试这个:

awk 'NR>2{a[++j]=$0}END{for (i=1;i<=j-3;i++){print a[i]}}' samplefile.out

如果您没有先读取或保存上一行,则无法计算文件的行。

如果存档太大,head + tail mix可能会更好地避免内存开销。

答案 3 :(得分:0)

您也可以尝试使用此功能,但它会使用array

$ cat file
entry0 45
entry0 42
entry1 41
entry2 78
entry3 89
entry4 68
entryn 58
entryn 33
etnryn 52

$ awk 'NR>first+last{print A[NR%last]}{A[NR%last]=$0}' first=2 last=3 file
entry1 41
entry2 78
entry3 89
entry4 68