想知道是否有人可以帮助我。所以我有一个包含10行的文本文件,一个while循环和一个从10开始的计数器。对于循环的每次迭代,我将减少它。然而,对于每次迭代,我想提取一条线,说第一个旋转的第10行和第二个的第9行,以比较它们。是否有一个函数表示您传递了一个值并且它提取了某一行?或它的某种组合。很感激帮助 感谢
答案 0 :(得分:1)
你可以用尾巴和头部做到这一点:
line=$(tail -n "+$N" file | head -n 1)
tail -n "+$N" file
将从行号$N
开始打印文件,head -n 1
将打印从尾部接收的第一行。然后,最终结果将存储在变量$line
中(没有结束换行符)。
如果你想要更短的东西,那就是一个ondiner:
line=$(sed -n -e "$N { p; q }" file)
将仅在行号$N
上调用print“p”命令,然后退出并退出“q”命令。
编辑:根据 glenn jackman 的建议添加q
命令,以评论其他答案
答案 1 :(得分:1)
将您的行号传递给awk
:
如果您的行号在变量i
中,则:
val=$(awk -v line=$i 'NR==line{print;exit}' filename)
会将i
行存储到变量val
。
答案 2 :(得分:1)
在shell中尝试以下操作:
read -p "Give me the number of the wanted line >>> "
sed -n "${REPLY}{p;q}" FILE