1

想知道是否有人可以帮助我。所以我有一个包含 10 行的文本文件、一个 while 循环和一个从 10 开始的计数器。对于循环的每次迭代,我都会递减它。但是对于每次迭代,我想提取一条线,比如第一次旋转的第 10 行和第二次旋转的第 9 行来比较它们。是否有一个函数说你将一个值传递给它并提取某一行?或它的某种组合。非常感谢帮助谢谢

4

3 回答 3

1

您可以使用尾部和头部执行此操作:

line=$(tail -n "+$N" file | head -n 1)

tail -n "+$N" file将从行号开始打印文件$Nhead -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 回答