将行范围写入文件(1 到 N)Bash、Awk 或 Sed 脚本

1 scripting bash sed awk

我已经从输入文件中提取了所需的行号(即 1 到 N)。我现在需要能够使用带有这个 1 到 N 的输入文件来输出到一个新文件。模式匹配已经发生在先前从输入文件中提取行号的函数中。现在我需要使用输入文件获取这个范围的数字并将该范围输出到一个新文件中。我不需要做任何模式匹配,只需要对一个新文件做 1 到 N。

我目前正在使用 bash 脚本和 Awk 提取必要的信息以从输入文件生成范围数据。现在我需要大发雷霆并创建一个从 1 到 N 的新文件(使用输入文件)。

我试过了

sed -i '1,'"$N" input.txt > input.log
Run Code Online (Sandbox Code Playgroud)

使用我的输入文件 input.txt 从 1 到 N 并输出到 input.log 文件,但出现以下错误:

sed: -e expression #1, char 3: missing command
Run Code Online (Sandbox Code Playgroud)

上面的代码行在 bash 脚本中。

Ste*_*itt 5

head 似乎是这项工作的最佳工具:

head -n "$N" input.txt > input.log
Run Code Online (Sandbox Code Playgroud)

使用sed,您需要指定一个命令;根据您的方法,这将是p命令和-n选项,因此默认情况下它不会打印模式空间:

sed -n "1,${N}p" input.txt > input.log
Run Code Online (Sandbox Code Playgroud)

sed "$N q" input.txt > input.log
Run Code Online (Sandbox Code Playgroud)

会更有效,只读取第一N行并停止(这也是head如此)而不是读取完整的文件(这也是sed "1,${N}p"如此)。

这些方法仅在N大于或等于 1 时产生相同的输出;如果它小于 1,则行为会有所不同。