Подсчет количества строк в файле независимо от символа окончания строки

Рекламный вопрос 1.

Я монтирую только кэширующее устройство, а не все резервные разделы и вижу файлы, которые находятся на этих резервных разделах

Неправда - вы монтируете устройство bcache. Оно должно быть внутренне составлено как минимум из одного устройства hdd. Кэш ssd на самом деле необязателен - так что вы все еще можете получить доступ к данным, даже если ваш ssd мертв. По крайней мере, если вы используете его с настройками по умолчанию.

Остальное - правда.

Рекламный вопрос 2.

Да, в модуле bcache есть эвристика, которая пытается отличить последовательное чтение от случайного. Но она работает на уровне отдельных системных вызовов - bcache является агностиком файловой системы: он даже не знает, что читает файлы. Поэтому все сводится к тому, как игра фактически загружает данные и какие системные вызовы в итоге используются. Если игра использует Назовите свою игру и посмотрите, проводил ли кто-нибудь ее бенчмарк. А еще лучше: проведите сравнительный анализ сами. Bcache значительно ускорил мои системы, но я не играю на них в игры.

Рекламный вопрос 3.

Да, bcache использует UUID при выборе разделов. Вы читали его документацию? Пожалуйста, сделайте.

Добавьте вопросы 4 и 5.

Это зависит от того, насколько вы хотите торговать скоростью системы против деградации ssd и сколько у вас оперативной памяти (/tmp часто tmpfs, которая поддерживается оперативной памятью).

Рекламный вопрос 6.

Есть/были по крайней мере 2 жизнеспособные альтернативы bcache, которые я систематически оценивал. Я решил инвестировать в bcache - в основном из-за скорости, совместимости и популярности. Это было в 2014 году.

2
29.12.2016, 08:01
2 ответа

Ваша команда grep давала слишком много совпадений, потому что grep использует базовые регулярные выражения , которые не придают особого значения \ r - считал появления буквы «р».

tr распознает \ n и \ r , поэтому он может найти все совпадения, и пусть wc -c считает их побайтово:

tr -d -c '\n\r' < file.txt | wc -c

Но поскольку ваш файл может также содержать окончания строк Windows / DOS ( \ r \ n ), они будут учитываться дважды. Вам понадобится дополнительный шаг, чтобы преобразовать любые окончания строк в стиле DOS в одну из других форм, а затем подсчитать отдельные символы конца строки, как раньше:

sed 's/\r$//' file.txt | tr -d -c '\n\r' | wc -c

К сожалению, sed не всегда распознает \ r либо. Возможно, вам придется использовать другой способ указать возврат каретки, например, собственное экранирование оболочки, команду echo или размещение сценария sed в файле.

1
27.01.2020, 22:43
gawk 'END {print NR}' RS='\r|\n|\r\n' file.txt

Переменная RS указывает, что считается новой строкой для gawk , в данном случае регулярным выражением.

0
27.01.2020, 22:43

Теги

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