Shell-Script
用標籤映射讀數
給定以下格式的讀數列表:
1 1 0 0 2 3 23101 23101 0 0 2 0 5 2 0 0 1 1 0 0 2 2 23104 23104 0 0 1 0 5 1 0 0
將它們映射到標籤的適當(和乾淨!)方式是什麼(標籤不是固定格式,我只從文件中知道第 1 列映射到 X,第 2 列映射到 Y 等等) .
輸出將進入一個文本文件以
prometheus
供讀取,因此所需的格式將是兩行格式,如下所示:# TYPE label_goes_here counter label_goes_here value_goes_here
理想情況下,我希望使用本
sh
機ksh
工具。perl
也可以,因為它作為預設廣泛安裝,不像python
.編輯以添加範例:
鑑於:
1 1 0 0 2 3 23101 23101 0 0 2 0 5 2 0 0
我們可以期望輸出如下所示:
# TYPE name_of_label_1 counter name_of_label_1 1 # TYPE name_of_label_2 counter name_of_label_2 1 # TYPE name_of_label_3 counter name_of_label_3 0 etc. etc. # TYPE name_of_label_16 counter name_of_label_16 0
與
awk
:LABELS='name_of_label_1 name_of_label_2 ...' awk ' BEGIN{split(ENVIRON["LABELS"], label)} { for (i = 1; i <= NF; i++) print "# TYPE", label[i], "counter\n"label[i], $i }' < input-file
讓我知道這是否滿足您的需要。
labels.txt
用於測試的文件:label_zero label_one label_two label_three label_four
- Perl 腳本將標籤應用於每一列(直到它們被耗盡):
echo "1 1 0 0 2 3 23101 23101 0 0 2 0 5 2 0 0" | perl -e 'open($lf, "<", "labels.txt"); @lbs = <$lf>; chomp(@lbs); @cols = split(/ /, <STDIN>); for $i (0..$#cols) { printf("%s %s\n", $lbs[$i] || "label_".$i, $cols[$i]) };'
- 輸出:
label_zero 1 label_one 1 label_two 0 label_three 0 label_four 2 label_5 3 label_6 23101 label_7 23101 label_8 0 label_9 0 label_10 2 label_11 0 label_12 5 label_13 2 label_14 0 label_15 0