我需要一個腳本來打印文本文件的最後n行的最後n行。文本文件名和行數可以變化,我只想調用腳本來打印最後n行的任何文本文件。我知道前n行我可以使用NR < n;打印,但我怎麼能做到這一點的最後n行作爲行數可以varied.-感謝使用awk腳本,以打印文本文件
回答
有正是出於這個目的的UNIX工具,叫做tail
。要獲得文件的最後100行,您可以使用tail -n 100 file
,然後直接使用輸出或將其傳送到其他程序(如awk)。
是的,我知道的尾巴,但我不知道怎麼寫,在以股代息可能的複製牛逼!對不起,我在awk中是如此的新鮮! – Sajjad
@Sajjad如果你真的需要裏面的awk尾巴的功能,例如參見http://stackoverflow.com/questions/9101296/implement-tail-with-awk –
要做到這一點本身在awk中,你要記住以線條爲你看到他們:
awk -v n=10 '
{line[NR]=$0}
END {for (i=NR-(n-1); i<=NR; i++) print line[i]}
' file
爲了節省內存,我們並不需要記住整個文件;使用
{line[NR]=$0; if (NR>n) delete line[NR-n]}
然而,它是簡單的扭轉文件,打印第一 n行,並重新反向輸出
tac file | awk -v n=10 'NR <= n' | tac
但使用tail
要簡單得多,所有這
作爲練習,還有另外一個版本的交易空間與時間來達到同樣的
$ awk -v n=10 'NR==FNR{a=NR;next} FNR>(a-n)' file{,}
先掃描文件得到的行數,並使用第二次篩選最後n行。
給這個腳本一試:
{
lines[(i=(++i%n))]=$0;
}
END {
if (NR>=n) {
linessize=n;
} else {
linessize=NR;
i=0;
}
for(j=1;j<=linessize;j++) {
print lines[(i+j)%n];
}
}
文件進行解析只有一次。
n元素只有用於緩衝讀取的行。
測試:
$ printf "one line\n2nd line\n" | ./tail-awk.awk -f script.awk -v n=10
one line
2nd line
$ ./tail-awk.awk -f script.awk -v n=10 <(man bash)
attempted. When a process is stopped, the shell immediately executes the next command in the sequence. It suffices to
place the sequence of commands between parentheses to force it into a subshell, which may be stopped as a unit.
Array variables may not (yet) be exported.
There may be only one active coprocess at a time.
GNU Bash-4.1 2009 December 29 BASH(1)
$ ./tail-awk.awk -f script.awk -v n=5 /etc/apt/sources.list
deb http://archive.debian.org/debian-archive hamm main
deb ftp://ftp.debian.org/debian squeeze contrib
$
感謝。有效。我怎樣才能編輯,通過使用這個'awk -f script.awk file.txt' – Sajjad
@Sajjad這個答案已被更新。 –
@Sajjad答案已經更新(再次) –
$ cat file
1
2
3
4
$ cat tst.awk
{ rec[NR % n] = $0 }
END {
for (i=NR+1+(n<NR?0:n-NR); i<=(NR+n); i++) {
print rec[i % n]
}
}
$ awk -v n=2 -f tst.awk file
3
4
設定時的i
起始值是,以適應需要你問打印更多的記錄情況下比存在的文件中,複雜如:
$ awk -v n=6 -f tst.awk file
1
2
3
4
- 1. AWK腳本文件2
- 2. Powershell腳本將垃圾文件打印到文本文件
- 3. AWK打印幫助cshell腳本
- 4. awk腳本打印字符串
- 5. awk腳本總是打印sum = 0
- 6. 將python腳本打印到文件
- 7. Bash腳本:從文件打印grep'd行
- 8. 打印php腳本輸出到文件
- 9. 打印文本使用Java
- 10. Webdriver腳本不會打印到文本文件
- 11. 使用jquery打印純文本的PHP腳本
- 12. BuddyPress腳本以純文本打印出來?
- 13. 如何使用awk命令在ksh文件中打印文件
- 14. awk腳本從文件類型
- 15. 如何使用NAnt腳本打印隱藏的文件/文件夾列表?
- 16. 打印隨機數序列上的一個文本文件中的行用awk
- 17. 使用shell腳本打印多個文件以獲得循環變量
- 18. 打印GtkTextView文本
- 19. 使用$ 1在bash腳本中用awk提取一些文本
- 20. 運行腳本以打開另一個腳本文件
- 21. 提取文本使用awk
- 22. Bash腳本,返回awk:無法打開文件〜/ .ssh/config
- 23. 批處理腳本 - 驗證印刷文件去打印隊列
- 24. 在Python中打印XML文本文件?
- 25. 將數據打印到文本文件
- 26. WPF中如何打印文本文件
- 27. 打印文本文件的內容到
- 28. 沒有在文本文件中打印
- 29. 將結果打印到文本文件
- 30. 無法打印到文本文件
的[實現與awk的尾巴(http://stackoverflow.com/questions/9101296/implement-tail-with-awk) – tripleee