Bash

將行範圍寫入文件(1 到 N)Bash、Awk 或 Sed 腳本

  • January 15, 2020

我已經從輸入文件中提取了所需的行號(即 1 到 N)。我現在需要能夠使用這個 1 到 N 的輸入文件來輸出到一個新文件。模式匹配已經發生在之前的函式中,該函式從輸入文件中提取了行號。現在我需要使用輸入文件獲取這個數字範圍並將該範圍輸出到一個新文件中。我不需要做任何模式匹配,只需要對一個新文件做 1 到 N。

我目前正在使用帶有 Awk 的 bash 腳本來提取必要的資訊以從輸入文件中生成範圍數據。現在我需要接受這種憤怒並創建一個從 1 到 N 的新文件(使用輸入文件)。

我試過了

sed -i '1,'"$N" input.txt > input.log

使用我的輸入文件 input.txt 從 1 到 N 並輸出到 input.log 文件,但我收到以下錯誤:

sed: -e expression #1, char 3: missing command

上面的程式碼行在 bash 腳本中。

head似乎是這項工作的最佳工具:

head -n "$N" input.txt > input.log

使用sed,您需要指定一個命令;根據您的方法,這將是p命令和-n選項,因此預設情況下它不會列印模式空間:

sed -n "1,${N}p" input.txt > input.log

sed "$N q" input.txt > input.log

會更有效,只讀取第一N行並停止(這也是這樣head做的)而不是讀取完整的文件(這也是這樣sed "1,${N}p"做的)。

這些方法僅在N大於或等於 1 時產生相同的輸出;如果小於 1,則行為會有所不同。

引用自:https://unix.stackexchange.com/questions/562022