你的位置:
问答吧
-> Shell
-> 问题详情
如何不用Shell的循环命令重复执行同一个命令N次?
如何直接使用命令模式而不写Shell脚本执行同一个命令N次?
如何去掉一个文件最后三行进行显示?(要求:不知道总行数)
作者: Safirst
发布时间: 2005-08-17
引用:
作者: Safirst
如何直接使用命令模式而不写Shell脚本执行同一个命令N次?
如何去掉一个文件最后三行进行显示?(要求:不知道总行数)1. 可以用递归法。写个小脚本也不防事。
2.
代码:
awk -v v=$(cat file|awk 'END{print NR}') '{if(NR<=('$v'-3))print}' file方法之一。
作者: yongjian
发布时间: 2005-08-17
第一个方法能将代码具体写出来吗?
第二个方法还是变相地得到了文件的总行数的---awk 'END{print NR}'
我希望能像tail -n 3 file 这样不知道总行数的办法,或者能求个集合减法。。。
作者: Safirst
发布时间: 2005-08-17
引用:
作者: Safirst
第一个方法能将代码具体写出来吗?
第二个方法还是变相地得到了文件的总行数的---awk 'END{print NR}'
我希望能像tail -n 3 file 这样不知道总行数的办法,或者能求个集合减法。。。第一个其实很简单,比如:
代码:
#!/bin/bash
a=0
loop (){
if [[ $a -lt 10 ]]; then
echo $a
((a=$a+1))
loop
fi
}
loop第二个嘛,要想想。
作者: yongjian
发布时间: 2005-08-17
第二怎么可能办到?
逻辑上我觉得就不能办到,你要显示除最后三行的内容,那必然遍历了这些内容,也就是说肯定会知道这些内容有多少行,然后再加上最后三行,也是变相地知道了总行数。
作者: kiron
发布时间: 2005-08-17
引用:
作者: Safirst
第二个方法还是变相地得到了文件的总行数的---awk 'END{print NR}'
我希望能像tail -n 3 file 这样不知道总行数的办法,或者能求个集合减法。。。似乎 tail 也是用类似计算总行数的方法完成的吧,有些东西确实是不能省略的。这就好像面对一个无序的数组,要想查出其中某一个数据的位置,除了一个一个的比较以外,没有其他的方法。
作者: herberteuler
发布时间: 2005-08-17
你知道$0吗?
作者: Yuri
发布时间: 2005-08-17
是的,同意krion兄和herberteuler兄意见。我想tail的源码实现中也必是将文件行数计算出来后得出的最后xx行。不然,“最后”从何说起呢?
作者: yongjian
发布时间: 2005-08-17
哦,那么我们就借助于tail已经求过了的结果完成任务行吗?
有谁知道$代表最后一行,如何才能用 $-3 表示倒数第三行行号?
$这个符号是不是可以运算的?
我想直接得到倒数第三行的行号,即使是借助于tail命令它已经帮我们求得总行数。
作者: Safirst
发布时间: 2005-08-17
引用:
作者: genv
你知道$0吗?$0在这里表示什么?文件吗?
作者: Safirst
发布时间: 2005-08-17
第一个的执行命令应该写在哪个位置?
作者: joewen
发布时间: 2009-04-08
我口凹,这坟墓挖得...
作者: Jockey
发布时间: 2009-04-08
引用:
作者: Safirst
如何直接使用命令模式而不写Shell脚本执行同一个命令N次?
如何去掉一个文件最后三行进行显示?(要求:不知道总行数)
我给个半搞笑半严肃的方法,看看能否满足lz的需求:
tac FILENAME | sed -n '4,$p' | tac
作者: skycleaner
发布时间: 2009-04-24