我想讓下面的命令起作用,但我做不到。請檢查一下:
echo "random string random string mark: abcde random string random string" |
awk '{gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"); print}'
我希望這個命令只回傳“abcde”。但它總是返回整個輸入字串。為什麼?
答案1
指令 gensub 不會更改字串。結果是函數的輸出。
請嘗試:
echo "random string random string mark: abcde random string random string" |
awk '{print(gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"))}'
編輯:
事實證明,用戶需要解析頂部輸出,這就是(按照用戶的要求):
top -b -n 1 -d 1 |
awk 'NR==1{print(gensub(/.*load average: ([0-9\.\, ]+).*$/,"\\1","gs"))}'
注意:對於使用逗號作為小數點分隔符號的區域設置,它允許使用點和逗號。
請看一下 mpstat如此處介紹的,它可能更適合您的需求。
答案2
重新表述您的問題:您想要列印字串「mark:」之後的第一個單字。
途中,在 awk 中:
echo "random string random string mark: abcde random string random string" | \
awk -v RS="mark: " 'NR==2{print $1}'
上面的程式碼將字串拆分為兩個由「mark:」分隔的記錄,然後列印第二個記錄的第一個單字(即「abcde」)。
在 sed 中:
echo "random string random string mark: abcde random string random string" | \
sed 's/.*mark: \([^ ]*\).*/\1/'
上面使用正規表示式查找“mark:”之後的第一個非空格單詞,並用該單字替換整個字串。