2014-09-05 31 views

回答

4

打印,但刪除行1至2:

sed '1,2d' filename 
9
sed -n '3,$p' file 

這僅僅是填料文本,因爲計算器不欣賞短的命令行。

44

可以使用尾部的手冊頁

摘錄:

-n, --lines=K 
     output the last K lines, instead of the last 10; or use -n +K to 
     output lines starting with the Kth 

例如

tail -n +10 file 

輸出文件的內容開始與10日線

+0

好一個我不知道的尾巴功能 – klashxx 2014-09-05 06:26:39

+0

我喜歡這樣!這比查找手冊頁更快... – Auspex 2016-03-01 10:29:03

+0

@Auspex:不知道你是否想在那裏搞笑:-)。並不是說速度更快,沒有可以回答海報的既定目標的聯機幫助頁。作爲一個長達數十年的用戶,地獄我不知道尾巴做到了這一點(我會轉向我所知道的,單行awk或Perl片段)。 – 2017-04-24 21:26:14

2

awk命令只能由印刷線的NR記錄編號做,這是三個或更多:

awk 'NR>=3' input_file_name 

你也可以使用一個變量傳遞值到awk如果需要的話:

awk -v n=3 'NR>=n' input_file_name 

(你也可以使用-v n=${num}來使用環境變量)。

還有許多其他的工具可以用來做同樣的工作,tailsedperl當中或者,因爲這是一種編程Q &一個網站,您只需將自己:

#include <stdio.h> 

int main (void) { 
    // Need character and # of newlines to skip. 

    int ch, newlines = 2; 

    // Loop until EOF or first lines skipped, exit on EOF. 

    while ((ch = getchar()) != EOF) 
     if ((ch == '\n') && (--newlines == 0)) 
      break; 

    if (ch == EOF) 
     return 0; 

    // Now just echo all other characters, then return. 

    while ((ch = getchar()) != EOF) 
     putchar (ch); 

    return 0; 
} 

現在你通常不會寫自己的過濾程序這一點,但,既然你問了最短的命令,你可以使用源代碼來創建一個名爲x做的可執行文件:

x <input_file_name 

你會很難找到比這更短的命令。當然,假設你在UNIXy環境(具體地說,bash),你也可以僅僅是:

alias x awk 'NR>=3' 

:-)

+0

如果你沒有放置任何'awk'NR> = 3'文件','{print}'會被隱含。 – tripleee 2014-09-05 06:01:14

+0

'export'在這裏沒有用處。 – tripleee 2014-09-05 06:02:04

+0

@tripleee:對第一個計數正確(如此改變),與第二個不相關。無論是否導出,我只是展示瞭如何使用shell變量。無論如何,調整了答案以消除這種情況。 – paxdiablo 2014-09-05 06:46:27

3

您可以使用awk這樣的:

awk 'BEGIN{n=5}NR<=n{next}1' file 
  • BEGIN{n=5} - 文件處理開始前,將n設置爲跳過的行數(5)。
  • NR<=n{next} - 如果行號小於或等於n,則跳過處理。
  • 1 - print其他所有內容的簡寫。
+2

最短的時間應該是'awk'NR> 5'文件',但既然已經有人建議了,我想補充說''awk'就像'sed'支持範圍運算符一樣。所以'awk'NR == 5,0'文件'也可以。 – 2014-09-05 07:01:09

6

從5日線顯示:

awk 'NR>4' file 
+0

小挑逗。它將從第6行開始顯示,但是+1沒有更少。 – 2014-09-05 07:02:25

+0

感謝您的編輯。不知道誰投下了你的好答案。希望別人意識到並推動它。 – 2014-09-05 07:20:34

相關問題