我需要一个脚本来打印文本文件的最后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. 打印文件 - Shell脚本
- 2. Powershell脚本将垃圾文件打印到文本文件
- 3. AWK脚本文件2
- 4. awk脚本打印字符串
- 5. awk脚本总是打印sum = 0
- 6. AWK打印帮助cshell脚本
- 7. Ruby脚本仅打印zip文件
- 8. 打印php脚本输出到文件
- 9. Bash脚本:从文件打印grep'd行
- 10. 将python脚本打印到文件
- 11. Python脚本打印C/C++文件
- 12. jZebra文本文件打印
- 13. Bash打印文本文件
- 14. 打印文本使用Java
- 15. 打印出一个文本文件,使用默认打印机
- 16. 打印文本文件颜色的Bash脚本
- 17. Webdriver脚本不会打印到文本文件
- 18. 打印记事本文本文件
- 19. 使用grep或awk搜索并将文本打印到文件中
- 20. 打印文本
- 21. 使用awk整理文本文件
- 22. 用printmanager打印文本文件
- 23. 使用jquery打印纯文本的PHP脚本
- 24. awk调用python脚本,因为文件无法打开/读取
- 25. 阅读json文件并使用PHP脚本打印输出
- 26. Tkinter的脚本以打印文本录入
- 27. BuddyPress脚本以纯文本打印出来?
- 28. 如何使用awk命令在ksh文件中打印文件
- 29. 使用awk打印文件中的空白文件
- 30. php脚本可以打印出他们的文件名吗?
的[实现与awk的尾巴(http://stackoverflow.com/questions/9101296/implement-tail-with-awk) – tripleee