如何從Unix上的文本文件中提取預定范圍的行?我有一個~23000行的SQL轉儲包含幾個數據庫的數據。我需要提取此文件的某個部分(即單個數據庫的數據)并將其放在一個新文件中。我知道我想要的數據的起始行和結束行號。有沒有人知道一個Unix命令(或一系列命令)從第16224和16482行之間的文件中提取所有行,然后將它們重定向到一個新文件?
3 回答

LEATH
TA貢獻1936條經驗 獲得超7個贊
sed -n '16224,16482p;16483q' filename > newfile
從sed手冊:
p - 打印出圖案空間(到標準輸出)。此命令通常僅與-n命令行選項一起使用。
n - 如果未禁用自動打印,則打印圖案空間,然后,無論如何,將圖案空間替換為下一行輸入。如果沒有更多輸入,那么sed退出而不再處理任何命令。
q - 退出
sed
而不處理更多命令或輸入。請注意,如果未使用-n選項禁用自動打印,則會打印當前模式空間。
sed腳本中的地址可以采用以下任何一種形式:
number 指定行號僅匹配輸入中的該行。
可以通過指定用逗號(,)分隔的兩個地址來指定地址范圍。地址范圍匹配從第一個地址匹配的行開始,并繼續(xù)直到第二個地址匹配(包含)。

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
sed -n '16224,16482 p' orig-data-file > new-file
16224,16482是起始行號和結束行號,包括在內。這是1索引的。 -n
抑制將輸入作為輸出回顯,這顯然是你不想要的; 數字表示使以下命令操作的行數范圍; 該命令p
打印出相關的行。

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
使用頭/尾非常簡單:
head -16482 in.sql | tail -258 > out.sql
使用sed:
sed -n '16482,16482p' in.sql > out.sql
使用awk:
awk 'NR>=10&&NR<=20' in.sql > out.sql
添加回答
舉報
0/150
提交
取消