Инструмент для воспроизведения канала, включая синхронизацию

Требуется GNU datamash версии 1.1.1. В версии 1.0.7 работает некорректно.

#!/bin/bash

tr '\n' ' ' < input.txt |
sed 's/\s*NA\s*/\n/g;' |
sed '/^$/d'  |
datamash --no-strict --filler="." -W -t' ' transpose

Пояснение

  1. tr '\n' ' ' < input.txt-заменяет все символы новой строки на пробелы. Другими словами, соедините все строки в одну строку.
  2. sed 's/\s*NA\s*/\n/g;'-заменяет все 'NA' и смежные пробелы на новую строку. То есть разбивает большую строку на несколько отдельных строк, каждая из которых является будущим столбцом, написанным горизонтально.
  3. sed '/^$/d'-удаляет все пустые строки.
  4. datamash --no-strict --filler="." -W -t' ' transpose
    • --no-strict-разрешить строки с различным количеством полей
    • --filler="."-заполнить пропущенные значения точкой. Его можно заменить на космос.
    • -W-используйте пробел (один или несколько пробелов и/или табуляции )для разделителей полей ввода.
    • -t' '-используйте пробел вместо TAB в качестве разделителя выходных полей.
    • transpose-преобразует строки в столбцы.

Вход

NA
4
3
5
7
8
3
NA
NA
NA
3
4
5
2
NA
2
7
4
6
9
NA

Выход

4 3 2
3 4 7
5 5 4
7 2 6
8. 9
3..

2
22.07.2020, 02:13
3 ответа

Теперь да:https://gitlab.com/ole.tange/tangetools/-/tree/master/teetime

Usage:

... | teetime [-a] file |...
teetime -i file

-a  append to file
-i  read from file
1
18.03.2021, 23:18

Мне не удалось заставить работать teetime (ошибок нет, возможно, у меня был неправильный perl ), поэтому я написал такой, который можно установить с помощью pip.

трубка:

pip3 install --user pipevcr

Вы записываете трубу с помощью -r, например.:

(echo start; sleep 1; echo continue; sleep 1; echo end) | pipevcr -r test.vcr

И воспроизведите его с помощью:

pipevcr test.vcr

Если вы хотите ускорить его, вы можете установить максимальное время ожидания для пауз:

pipevcr -m 300 test.vcr
1
18.03.2021, 23:18

Зависит от требуемой точности. С точностью до одной -секунд сценарий оболочки может просто ставить перед каждой строкой текущее значение SECONDS. При воспроизведении он может заснуть на период между собственными СЕКУНДами и значением в следующей строке файла.

Более высокая точность потребует вызова date(, который дает наносекунды с неизвестной точностью и включает внешний процесс для каждой строки данных )или использования C (, который дает микросекунды ). Задержки во входном канале могут немного нарушить первоначальную -штамповку времени.

0
18.03.2021, 23:18

Теги

Похожие вопросы