如何將 200 行檔案中的第 10 到 100 行放入新檔案中

如何將 200 行檔案中的第 10 到 100 行放入新檔案中

我有 200 行的文件。

我需要提取 10 到 100 行並將它們放入一個新文件中。

在 UNIX/Linux 中如何做到這一點?

您可以使用哪些可能的指令?

答案1

使用sed:

sed -n -e '10,100p' input.txt > output.txt

sed -n方法預設列印每一行。-e表示將下一個參數作為 sed 腳本執行。10,100p是一個 sed 腳本,意味著從第 10 行開始,直到第 100 行(含),列印 ( p) 該行。然後輸出儲存到output.txt.

如果您的文件比建議的長,這個版本(評論中建議的)會更快:

sed -e '1,9d;100q'

這意味著刪除第 1-9 行,辭職第 100 行之後,列印其餘部分。對於 200 行,這並不重要,但對於 200,000 行,第一個版本仍然會查看每一行,即使它永遠不會列印它們。一般來說,我更喜歡第一個版本,因為它很明確,但對於長文件,這會快得多——你最了解你的數據。

或者,您可以組合使用head和:tail

tail -n +10 input.txt | head -n 91 > output.txt

這次,tail -n +10從第 10 行開始列印整個文件,並head -n 91列印其中的前 91 行(直到原始文件的第 100 行)。它output.txt以相同的方式重定向到。

答案2

這應該要做

tail -n +10 file.txt | head -n 91 > newfile.txt

答案3

如果你要在 中執行此操作vim,那就非常簡單了。假設您的文件已命名src,並且您希望將行移動到的文件是dest.如果dest尚不存在,您將創建它:

touch dest

然後,打開srcdestin vim(該-p標誌在選項卡中打開參數):

vim -p src dest

跳到第十行;選擇從第 10 行到第 100 行的所有內容;猛拉;切換到包含dest;的選項卡貼。

10ggv101ygtp

筆記101選擇到第 101 行的開頭(捕獲\n第 100 行末尾的 )。


這顯然是比使用命令列工具更複雜的過程,但確實具有為您提供視覺選擇的優點(因此您可以確保獲得您想要的一切)。然而,這似乎也是一個很好的用例awk

awk 'NR==10, NR==100' src > dest

NR變數允許您根據行數進行模式匹配。因此,上面的命令會從中提取第 10-100 行src,然後 shell 將輸出重定向到dest.

答案4

您可以透過多種方式做到這一點。

解決方案awk

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

一個perl辦法:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

相關內容