Используя
wc
,head
иtail
:half=$(( $(wc -l "$file")/2 )) head -$half | egrep -c dead | xargs echo "$file" $half > log_1 tail -$half | egrep -c dead | xargs echo "$file" $half > log_2
Использование
split
:split -a1 --numeric-suffixes=1 -n 'l/2' "$file" "$file"_ echo "$file" "$file"_1 $(egrep -c dead "$file_1") > log_1 echo "$file" "$file"_2 $(egrep -c dead "$file"_2) > log_2 rm "$file"_[12]
разделение файла: подставьте `egrep` в` sed`
Я хочу разделить мой файл $, содержащий x строк пополам, и проверить, сколько строк содержат « мертвые » в журнале. Я начал со следующего:
half=`expr $(egrep -c . $file) / 2` sed -n 1,$p $file | xargs echo $file $half $(egrep -c dead $I) > log_1 sed -n $,$p | xargs echo $file $half $(egrep -c dead $I) > log_2
вывод для первой sed
команды в порядке, но при замене egrep
в диапазоне sed
он идет не так:
DeadOrAlive 5 2 -bash: $,$p: bad substitution
Есть ли более эффективный способ разбиения файла в bash
?
2 ответа на вопрос
Вот решение Awk.
awk '/dead/ { a[++n] = NR } END { for (i=1; i<=n; i++) if (a[i] > NR/2) break print ARGV, int(NR/2), i-1 >"log_1"; print ARGV, int(NR/2)+(int(NR/2)!=NR/2), n-i+1 >"log_2" }' file
Мы собираем в массив a
номера строк совпадений. Затем мы выясняем, сколько номеров строк в массиве меньше, чем средняя линия; их количество назначено первому разделу. (Мы должны использовать, i-1
потому что мы уже прошли точку разделения, когда мы break
вне цикла.)
В общем, вы хотите избегать перечитывания одного и того же файла много раз, особенно если он может быть большим; и во-вторых, постарайтесь минимизировать количество процессов.
Непонятно, что вы ожидаете от среднего поля вывода. Если файл содержит нечетное количество строк, первая «половина» будет содержать на одну строку меньше, чем второй раздел. (Это не сложно изменить, но вы должны решить, так или иначе.)
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
4
Каковы различия между основными дистрибутивами Linux? Я замечу?
-
-
2
Ограничить использование процессора для Flash в Firefox?
-
2
Как мне заставить мой микрофон работать под Debian GNOME?
-
2
Конки установки - образцы / идеи?
-
3
Каковы различия между оконными менеджерами Linux?
-
2
ThunderBird / Синхронизация освещения с SE k770i
-
4
Файловая система Linux
-
6
Полноэкранная медленная вспышка в KDE 4