簡體   English   中英

bash: awk 打印並打印

[英]bash: awk print with in print

我需要 grep 一些模式,而且我需要在其中打印一些輸出。 目前我正在使用下面的命令,它工作正常。 但我喜歡消除使用多個管道並希望使用單個 awk 命令來實現相同的輸出。 有沒有辦法使用awk來做到這一點?

root@Server1 # cat file
Jenny:Mon,Tue,Wed:Morning
David:Thu,Fri,Sat:Evening

root@Server1 # awk '/Jenny/ {print $0}' file | awk -F ":" '{ print $2 }' | awk -F "," '{ print $1 }'

Mon

我想使用單個 awk 命令獲取此輸出。 有什么幫助嗎?

嘗試這個

awk -F'[:,]+' '/Jenny/{print $2}' file.txt 
  • 它在[ ]使用多個-F
  • +表示一個或多個,因為它被視為正則表達式。

您可以嘗試以下操作:

awk -F: '/Jenny/ {split($2,a,","); print a[1]}' file 

對於這個特殊的工作,我發現grep稍微更健壯。 除非您的公司有不雇用名為 Eve 的人的政策。 (不明白的可以試一試。)

grep -oP '^[^:]*Jenny[^:]*:\K[^,:]+' file

或者做一個全字匹配:

grep -oP '^[^:]*\bJenny\b[^:]*:\K[^,:]+' file

或者當您確信“Jenny”是全名時:

grep -oP '^Jenny:\K[^,:]+' file

輸出:

Mon

解釋:

  • 直到\\K的東西不言自明:它選擇具有所需名稱的行。
  • [^,:]+捕獲星期幾(在本例中為Mon )。
  • \\K切斷Mon之前的所有內容。
  • -o切斷Mon之后的任何內容。

暫無
暫無

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

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