Linux
如何使用剪切列印文本文件的特定行
我有日誌輸出的下一個片段:
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 個空格或製表符或您擁有的任何分隔符。在這種情況下,您將需要使用awk
which 將其輸入行拆分為任意數量的連續空格(預設情況下)。$ 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
將結果格式化成一個漂亮的表格。