Shell-Script

用標籤映射讀數

  • September 22, 2019

給定以下格式的讀數列表:

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

理想情況下,我希望使用本shksh工具。 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

引用自:https://unix.stackexchange.com/questions/542983