簡體   English   中英

Bash:刪除除最后n行之外的所有輸入行

[英]Bash: remove all lines of input except last n lines

我想刪除除了最后一行或前n行之外的所有行,並使用短的單行

例如。:

---

aaaa

bbbb

cccc

dddd

cat/echo/find ...  | sed < all except last 2 lines > 

應該結果

aaaa

bbbb

---

aaaa

bbbb

cccc

dddd

eeee

ffff

cat/echo/find ...  | sed < all except last 2 lines > 

應該結果

aaaa

bbbb

cccc

dddd

---

我也需要這個非常高的n。 所以可以設置n = 100左右;)

Thanx任何幫助!

刪除最后兩行,您可以使用以下內容:

head -n $(($(wc -l < "$filename") - 2)) "$filename"

不是很優雅,但它應該工作。 我使用wc -l來計算行數,然后我使用head來顯示第一行數減去2行。

編輯:只保留你可以做的最后N

tail -n $N $filename

保留N行,你可以做。

head -n $N $filename

我似乎誤解了你的問題,這就是我添加這兩個命令的原因。

從頭文章頁面:

-n, --lines=[-]N
      print  the first N lines instead of the first 10; with the lead-
      ing ‘-’, print all but the last N lines of each file

這意味着... | head -n -2 ... | head -n -2會做你想要的。

作為替代方案,以下內容也可以使用,但我認為它的效率對於大文件來說並不是很好。

tac file | awk 'NR>2' | tac

我想刪除除最后一行之外的所有行

最簡單的方法是做(讓n = 5):

tail -n5 $filename > $filename.tmp && mv $filename.tmp $filename

這將輸出最后五行到新文件,然后重命名它。

如果任務相反 - 您需要所有行,但最后5行,您可以這樣做:

head -n$((`cat $filename | wc -l` - 5)) $filename > $filename.tmp && mv $filename.tmp $filename

保留文件的最后1000行(例如:alert_PROD.log)

tail -1000 alert_PROD.log > alert_tmp ; cat alert_tmp > alert_PROD.log ; rm alert_tmp

保持前1000行使用head而不是tail命令:

head -1000 alert_PROD.log > alert_tmp ; cat alert_tmp > alert_PROD.log ; rm alert_tmp

要刪除inputfile的最后3行:

set 3 inputfile; sed "$(($(sed -n $= $2)-$1+1)),\$d" $2

要打印除文件的前3行以外的所有行,然后除了最后3行之外的所有行:

$ cat -n file
     1  a
     2  b
     3  c
     4  d
     5  e
     6  f
     7  g
$ awk -v sz="$(wc -l < file)" 'NR>3' file      
d
e
f
g
$ awk -v sz="$(wc -l < file)" 'NR<=(sz-3)' file
a
b
c
d

你可以使用頭部和尾部:

要刪除除前n行之外的所有行:

head -n filename> new_filename

刪除除最后n行之外的所有行:

tail -n filename> new_filename

這是一個例子:

$ cat測試

1

2

3

4

6

7

8

$ head -2測試

1

2

你也可以試試

awk -vn=2 -f rem.awk input.txt

rem.awk在哪里

BEGIN { ("wc -l " ARGV[1]) | getline 
    a=$1-n+1 }     
NR<a { print }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM