Linux

如何使用剪切列印文本文件的特定行

  • August 9, 2018

我有日誌輸出的下一個片段:

Server Server: Server
Date and Time: June 04 2018 14:10:00
--

Product     Version         User         Host             IP             Duration

Software1      11.0     user               user         *.**.***.***     10:08
Software2      11.0      user                user        *.**.***.***     10:05
===================================================================================

我希望使用cut命令僅過濾到輸出,例如:

Product     Version         Host             IP             Duration

Software1      11.0    user             *.**.***.***     10:08
Software2      11.0     user            *.**.***.***     10:05

另外,我想知道是否可以多次應用相同的過濾器,因為上面的第一個範例在整個文件中重複了自己。

使用 awk:

awk '/--/{flag=1; next} /====/{flag=0} flag' filename

使用 SED:

sed -n '/--/,/===/{/--/!{/===/!p}}' filename

使用 grep:

grep -E 'Product|Mathematica|MathKernel|Syntax' filename

在這種情況下,您不能真正使用cut,因為數據的列沒有明確定義。該cut實用程序通過切割精確數字來工作,例如精確切割 3 個空格或製表符或您擁有的任何分隔符。在這種情況下,您將需要使用awkwhich 將其輸入行拆分為任意數量的連續空格(預設情況下)。

$ awk -v OFS="\t" '/^==/ { next } NR > 4 { print $1, $2, $4, $5, $6 }' file | column -t
Product    Version  Host  IP            Duration
Software1  11.0     user  *.**.***.***  10:08
Software2  11.0     user  *.**.***.***  10:05

awk程序會跳過任何從第 5 行開始的行==和第 5 行之前的任何行。對於所有其他行,它會列印欄位的選擇(不是第 3 行User)。

最後column -t將結果格式化成一個漂亮的表格。

引用自:https://unix.stackexchange.com/questions/458508