我有以下檔案,我想應用一個正則運算式來擁有 3 列,如下例所示:
檔案日志:
prometheus-1234
51 /etc/prometheus
prometheus-2343242
51 /etc/prometheus
app32-ddsp8
80 /usr/local/etc/app32
app33-dfssdx9
68 /usr/local/etc/app33
proxy-dadas
87 /etc/hosts
而且我試圖從下面獲得預期的輸出,但我沒有成功使用 awk 或 bash。 預期輸出示例:
prometheus-1234 51 /etc/prometheus
prometheus-2343242 51 /etc/prometheus
app32-ddsp8 80 /usr/local/etc/app32
app33-dfssdx9 68 /usr/local/etc/app33
proxy-dadas 87 /etc/hosts
我試過這條 awk 行:
決議.awk
BEGIN {
RS="\n\n";
FS="\n";
}
{
print $1,$2;
}
awk -f parse.awk file.log
prometheus-1234 51 /etc/prometheus
它只輸出我第一 2 行 :)
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk。
awk -v RS= -v FS="\n" '{for(i=1;i<=NF;i =2){print $i,$(i 1)}}' Input_file
uj5u.com熱心網友回復:
使用Awk:
輸入:
$ cat test.txt
prometheus-1234
51 /etc/prometheus
prometheus-2343242
51 /etc/prometheus
app32-ddsp8
80 /usr/local/etc/app32
app33-dfssdx9
68 /usr/local/etc/app33
proxy-dadas
87 /etc/hosts
輸出:
假設行以數字開頭
$ awk '{printf("%s%s",$0,/^[0-9] /?RS:OFS)}' test.txt
prometheus-1234 51 /etc/prometheus
prometheus-2343242 51 /etc/prometheus
app32-ddsp8 80 /usr/local/etc/app32
app33-dfssdx9 68 /usr/local/etc/app33
proxy-dadas 87 /etc/hosts
通過修改輸出記錄分隔符(ORS)假設每第二行:
$ awk '{ORS=NR%2?OFS:RS}1' test.txt
prometheus-1234 51 /etc/prometheus
prometheus-2343242 51 /etc/prometheus
app32-ddsp8 80 /usr/local/etc/app32
app33-dfssdx9 68 /usr/local/etc/app33
proxy-dadas 87 /etc/hosts
uj5u.com熱心網友回復:
不知道為什么要為此使用正則運算式,您只是加入了成對的行:
$ awk 'NR%2{s=$0; next} {print s, $0}' file
prometheus-1234 51 /etc/prometheus
prometheus-2343242 51 /etc/prometheus
app32-ddsp8 80 /usr/local/etc/app32
app33-dfssdx9 68 /usr/local/etc/app33
proxy-dadas 87 /etc/hosts
uj5u.com熱心網友回復:
我會AWK按照以下方式使用 GNU 來完成這項任務,讓file.txt內容成為
prometheus-1234
51 /etc/prometheus
prometheus-2343242
51 /etc/prometheus
app32-ddsp8
80 /usr/local/etc/app32
app33-dfssdx9
68 /usr/local/etc/app33
proxy-dadas
87 /etc/hosts
然后
awk 'NR%2{printf "%s ",$0;getline;print}' file.txt
輸出
prometheus-1234 51 /etc/prometheus
prometheus-2343242 51 /etc/prometheus
app32-ddsp8 80 /usr/local/etc/app32
app33-dfssdx9 68 /usr/local/etc/app33
proxy-dadas 87 /etc/hosts
說明:對于每一個奇數行(即行號除以 2 的余數不為零)執行printf當前行,因此它后面是空格而不是換行符,使用下一行 ( getline) 并且只是print它免責宣告:此解決方案假定檔案具有總是偶數行。
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466764.html
下一篇:在集群上并行執行多個輸入的腳本
