簡體   English   中英

使用cut或Awk的特定字段

[英]Specific fields using cut or Awk

如何從一行中切出特定字段?

問題是由於字段更改,我無法使用cut -d ' ' -f 1,2,3,4,5,9,10,11,12,13,14

假設我有一個名為/ var / log / test的文件,文件中的其中一行如下所示:

Apr 12 07:48:11 172.89.92.41 %ASA-5-713120: Group = People, Username = james.robert, IP = 219.89.259.32, PHASE 2 COMPLETED (msgid=9a4ce822)

我只需要獲取用戶名和時間/日期(請注意列會不斷變化,這就是為什么我需要匹配用戶名= james.robert和4月12日07:48:11

當我使用時:

grep "james" /var/log/tes | cut -d ' ' -f 1,2,3,4,5,9,10,11,12,13,14 

對我不起作用。 因此,它必須匹配用戶名並僅打印用戶名和數據/時間。 有什么建議么?

好的,所以當我使用這個:

awk -F'[ ,]' '$12~/username/{print $1,$2,$3,$12}' /var/log/test

但它適用於某些用戶,但不適用於其他用戶,因為字段一直在移動。

該命令的示例輸出是:

4月12日06:00:39 james.robert

但是,當我在此用戶名上嘗試此命令時,它不起作用。 見下文 :

這是上面的命令不顯示任何內容的另一個示例:

Apr  8 12:16:13 172.24.32.1 %ASA-6-713228: Group = people, Username = marry.tarin, IP = 209.157.190.11, Assigned private IP address 192.168.237.38 to remote user

如果您的文件結構一致

awk -F'[ ,]' '{print $1,$2,$3,$12}' file

Apr 12 07:48:11 james.robert

如果您需要匹配用戶名,請使用示例輸入

$ awk -F'[ ,]' '$12~/james/{print $1,$2,$3,$12}' file
Apr 12 07:48:11 james.robert

更新

好的,您的空格不一致,要修復更改-F

$ awk -F' +|,' '{print $1,$2,$3,$12}' file

Apr 12 07:48:11 james.robert
Apr 8 12:16:13 marry.tarin

您可以添加/ pattern /以將匹配項限制為用戶,如上所述。 注意-F選項中的更改。

-F' +|,'將字段分隔符設置為空格(一個或多個)或逗號,其余的則是對字段進行計數並選擇要打印的正確字段。 /pattern/將過濾與正則表達式模式匹配的行,這些行可以被$12~/pattern/限制為僅某些字段(例如12)

如果您的文本可能包含大小寫混合tolower()區分大小寫,請使用tolower()函數,例如

$ awk -F' +|,' 'tolower($12)~/patterninlowercase/{print $1,$2,$3,$12}' file

sed

sed -r 's/^([A-Za-z]{3} [0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2}).*(Username = [^,]*).*/\1 \2/g' file

您可以使用awk用逗號定界,然后使用substr()length()獲得您所關心的內容:

awk -F"," '{print substr($1,1,15), substring($3, 13, length($3)-12)}' /var/log/test

gawk

awk '{u=gensub(/.*(Username = [^,]*).*/,"\\1","g",$0);if ( u ~ "james") {print u,$1,$2,$3}}' file

下面的perl將打印由標簽分隔的日期和用戶名。 [\\w.]添加其他有效的用戶名字符:

perl -ne '
    print $+{date}, "\t", $+{user}, "\n" if
        /^(?<date>([^\s]+\s+){2}[^\s]+).*\bUsername\s*=\s*(?<user>[\w.]+)/
    '

允許使用不同數量的制表符和空格。

暫無
暫無

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

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