我試圖讓我的程序通過日誌文件進行解析,試圖找到單詞「user」並將其打印出來,或打印出「N/A」if它沒有找到它。這第一行代碼是我原來的例子之前,我試圖在else語句來寫:如果表達式不在記錄中打印
awk '{for(i=1;i<=NF;i++){if($i~/^user/){print $i}}}' myFile
它的工作原理不同的是,現在我要麼需要把一個空行或「N/A」,這樣的能力即使特定線路沒有與之關聯的用戶,我表格中的記錄也具有適當的值。這是我嘗試在其他情況下,添加:
awk '{for(i=1;i<=NF;i++){if($i~/^user/){print $i} else {print "stuff"}}}' myFile
它的問題是,它看起來在每一個領域,並打印「N/A」的時候,我只希望它做一次,如果術語「用戶「在記錄行中找不到。我想過使用NR和NF做一個嵌套循環,但是我堅持認爲這看起來如何。
樣品輸入可以是:
status-code=32 action=add user=jim
status-code=43 message=otherException
status-code=32 action=add user=paul
status-code=32 action=delete user=reggie
status-code=2 action=endFile
示例輸出將如下所示(我有另一段代碼,修剪「用戶=」位關閉後):
user=jim
N/A
user=paul
user=reggie
N/A
在上面的例子中,上面的記錄沒有用戶的字段(他們可能是狀態消息或錯誤消息)。我不想跳過它們,而是想包括一個空白行或其他標記,以便在執行paste myfile myfile2 > myfile3
命令時,即使不是每列都有用戶字段,列也會匹配。
擁有最多1個用戶是正確的,是的。如果有兩個案例能幫助未來的人們看到這個問題,我想我可以再增加一個案例。 – Dumpcats