为什么在 Unix 中使用“tail -n 1”来查找文件的第 n 行?

为什么在 Unix 中使用“tail -n 1”来查找文件的第 n 行?

我注意到人们通常使用head -n | tail -n 1Shell 来查找文件的第 n 行。

例如,如果我被要求查找文件的第 7 行,为什么不直接使用head -7而不是使用 来创建管道tail

答案1

head -7

或其现代和标准的等价物:

head -n 7

打印输入的前 7 行(如果较少,则最多打印 7 行)。

通过管道将其tail -n 1从其中取出最后一行,因此仅7行或最后一行(如果行数较少)。

为了仅获取第 7(如果行数较少则不获取任何内容),您可以使用:

tail -n +7 | head -n 1

对于较大的值或行号来说,由于通过管道的数据较少,因此效率也会更高。

您也可以通过一个sed命令来完成此操作:

sed '7!d;q'

尽管这可能效率较低,因为它sed不像head和那样专业化tail,并且与/sed相反,不需要能够处理比这更长的行,具体取决于实现可能无法在过长的行上工作。headtailLINE_MAX

请注意,sed -n 7p或按照注释中的建议,即使在打印sed '7!d'7 行后也要读取整个输入,而不是像那样停止阅读。这效率较低,但在某些情况下,例如当应用于命令的输出时,我们不想在输出第7 行后终止该命令,这可能更可取。head

相关内容