在Unix中提取文本文件的某些指定行的函数

时间:2012-10-04 21:33:17

标签: bash unix

想知道是否有人可以帮助我。所以我有一个包含10行的文本文件,一个while循环和一个从10开始的计数器。对于循环的每次迭代,我将减少它。然而,对于每次迭代,我想提取一条线,说第一个旋转的第10行和第二个的第9行,以比较它们。是否有一个函数表示您传递了一个值并且它提取了某一行?或它的某种组合。很感激帮助 感谢

3 个答案:

答案 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