Вы не должны использовать линейные утилиты, такие как awk
и sed
. Эти утилиты будут выполнять системный вызов read()
для каждой строки во входном файле (см. ответ о том, почему это так ). Если у вас много строк, это будет огромной потерей производительности.
Поскольку ваш файл имеет размер 4 ТБ, я предполагаю, что в нем много строк. Таким образом, даже wc -l
будет производить множество read()
системных вызовов, поскольку он считывает только 16384
байт за вызов (в моей системе ). В любом случае это будет улучшение по сравнению с awk
и sed
. Лучший метод -, если только вы не пишете собственную программу -, может быть просто
cat file | wc -l
Это не бесполезное использование cat, потому что cat
читает фрагменты 131072
байтов на read()
системный вызов (в моей системе )и wc -l
выдаст больше, но не в файл напрямую, а не на трубе. Но, тем не менее, cat
пытается прочитать как можно больше за системный вызов.
Майк Фарахyq
— это мой -инструмент для манипулирования YAML. Например, используя файл определения пространства имен Kubernetes:
извлечь имя пространства имен:
yq read deploy/namespace.yaml metadata.name
добавить метку:
yq write deploy/namespace.yaml metadata.labels.name demo
(это заменит существующий узел,или добавьте новый, если его еще нет)
Опцию -i
можно использовать для обновления файлов в месте -.
Вы не найдете всего того, что инструменты XSLT обычно могут делать (илиjq
для JSON ), например, вы не найдете тестов для вложенных -выражений, поэтому вы не сможете (AFAIK )пишет эквивалент «обновить этот дополнительный узел -на узлах, у которых есть этот другой дополнительный узел -с этим значением».