我有一个这样的文件,除了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
由于
答案 0 :(得分:4)
awk无法向前看,所以你必须保存这些行。
awk 'NR>2{if(z!="")print z;z=y;y=x;x=$0}' file
实际上零内存开销
答案 1 :(得分:3)
您可以结合使用head
和tail
:
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