我有 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
然後,打開src
和dest
in 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