У меня есть небольшой скрипт для извлечения определенных данных и небольшой очистки выходных данных. Это кажется слишком грязным, и мне интересно, можно ли немного урезать сценарий.
- Входной файл содержит пары строк - имена, за которыми следуют цифры.
- Пары линий, числовое значение которых не находится в диапазоне от 80 до 199, следует отбрасывать.
- Пары могут иногда, но не всегда, предшествовать или сопровождаться пустыми строками, которые следует игнорировать.
Пример входного файла:
al12t5682-heapmemusage-latest.log
38
al12t5683-heapmemusage-latest.log
88
al12t5684-heapmemusage-latest.log
100
al12t5685-heapmemusage-latest.log
0
al12t5686-heapmemusage-latest.log
91
Пример / требуемый результат:
al12t5683 88
al12t5684 100
al12t5686 91
Текущий скрипт:
grep --no-group-separator -PxB1 '([8,9][0-9]|[1][0-9][0-9])' inputfile.txt \
| sed 's/-heapmemusage-latest.log//' \
| awk '{$1=$1;printf("%s ",$0)};NR%2==0{print ""}'
Пример дополнительного ввода
al14672-heapmemusage-latest.log
38
al14671-heapmemusage-latest.log
5
g4t5534-heapmemusage-latest.log
100
al1t0000-heapmemusage-latest.log
0
al1t5535-heapmemusage-latest.log
al1t4676-heapmemusage-latest.log
127
al1t4674-heapmemusage-latest.log
53
A1t5540-heapmemusage-latest.log
54
G4t9981-heapmemusage-latest.log
45
al1c4678-heapmemusage-latest.log
81
B4t8830-heapmemusage-latest.log
76
a1t0091-heapmemusage-latest.log
88
al1t4684-heapmemusage-latest.log
91
Дополнительный пример ожидаемого результата:
g4t5534 100
al1t4676 127
al1c4678 81
a1t0091 88
al1t4684 91