2015-06-22 44 views
0

我有一個這樣的文件,並希望打印$0,除了Linux中的前兩行和後三行。嘗試awk命令,但沒有運氣,是否有任何選項,我正在使用以下命令 - 我想我做錯了什麼,但無法弄清楚它是什麼與我在計算機科學的最小經驗。忽略文件中的前幾行和最後幾行Linux

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

awk不能向前看,所以你必須保存行。

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

幾乎爲零內存開銷

+2

好的解決方案 – klashxx

2

試試這個:

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

有沒有辦法來計算文件的行,如果你不讀或先保存前行。

如果檔案太大,head + tail mix可能會更好,以避免內存開銷。

3

您可以用headtail組合做到這一點:

tail -n +2 samplefile.out | head -n -3 > sampleout.txt 
+1

這似乎是這種工作的好工具! – fedorqui

+1

我認爲這應該是公認的答案,因爲它是實現這一目標的理想方式,特別是當我的方式變得無法用更多的線條維護時。 – 123

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