Скрипт для разбора полей, изменение формата n-го

Я думаю, что этот абзац говорит о nullfs.

Если у вас есть файл (, пусть это будет foo), который накладывается с помощью unionfsмонтирования, вы можете mount_nullfsсначала переместить его в какой-нибудь другой файл (, скажем, bar), а затем выполнить mount_unionfs. После этого вы сможете получить доступ к файлу fooчерез имя файла bar.

0
23.01.2020, 12:28
1 ответ

Должна быть возможность играть на «одном -лайнере». На самом деле вам нужно только правило, которое изменяет поле 10, если оно встречает отметку времени без миллисекунд, и одно правило, которое просто «печатает» всю строку для общего случая (, включая возможную модификацию из-за правила 1 ). Итак, если предположитьGNU Awk:

awk -F'|' -v OFS='|' '$10 ~ /^[[:digit:]]{4}(-[[:digit:]]{2}){2} ([[:digit:]]{2}:){2}[[:digit:]]{2}$/ {$10=$10".000"} {print}' textfile

должно помочь.

Вышеупомянутое регулярное выражение в большинстве случаев чрезмерно "тщательно" проверяет отметку времени.Если вы достаточно доверяете своему формату файла, вы можете уменьшить проверку поля 10 до

awk -F'|' -v OFS='|' '$10 ~ /:[0-5][0-9]$/ {$10=$10".000"} {print}'

, для которого также больше не требуется версия GNU awk.

Применение к тестовому входу

a|b|c|d|e|f|i|j|k|2020-01-20 10:22:33|m|n|o
a|b|c|d|e|f|i|j|k|2020-01-20 10:22:33.123|m|n|o

дает:

~$ awk -F'|' -v OFS='|' '$10 ~ /:[0-5][0-9]$/ {$10=$10".000"} {print}' testinput

a|b|c|d|e|f|i|j|k|2020-01-20 10:22:33.000|m|n|o
a|b|c|d|e|f|i|j|k|2020-01-20 10:22:33.123|m|n|o
0
28.01.2020, 02:54

Теги

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