想知道是否有人可以帮助我。所以我有一个包含 10 行的文本文件、一个 while 循环和一个从 10 开始的计数器。对于循环的每次迭代,我都会递减它。但是对于每次迭代,我想提取一条线,比如第一次旋转的第 10 行和第二次旋转的第 9 行来比较它们。是否有一个函数说你将一个值传递给它并提取某一行?或它的某种组合。非常感谢帮助谢谢
问问题
195 次
3 回答
1
您可以使用尾部和头部执行此操作:
line=$(tail -n "+$N" file | head -n 1)
tail -n "+$N" file
将从行号开始打印文件$N
,head -n 1
并将打印从尾部接收到的第一行。然后最终结果将存储在变量中$line
(没有结束换行符)。
如果你想要更短的东西,有一个 sed oneliner:
line=$(sed -n -e "$N { p; q }" file)
它将仅在行号上调用 print "p" 命令$N
,然后使用 quit "q" 命令退出。
编辑:添加了格伦杰克曼q
建议的命令以评论另一个答案
于 2012-10-04T21:49:23.650 回答
1
将您的行号传递给awk
:
如果变量中有行号,i
则:
val=$(awk -v line=$i 'NR==line{print;exit}' filename)
将i
第 th 行存储到变量val
中。
于 2012-10-04T21:50:05.070 回答
1
在 shell 中尝试以下操作:
read -p "Give me the number of the wanted line >>> "
sed -n "${REPLY}{p;q}" FILE
于 2012-10-04T21:51:56.357 回答