Состояние гонки уже определено. Но если вам нужно более простое решение, вам не нужен отдельный wc
для подсчета записей, awk
может это сделать:
awk '{if($2!~/\*/){print $1;++n}END{print n >"n.txt"}' tmp | sort | uniq -c ...
Кроме того, awk
может считать как sort|uniq -c
до тех пор, пока значения помещаются в память, а также делать вычисления x/n, но может выводить в "случайном" порядке; также использование матча/действия более аккуратно:
awk '$2!~/\*/{++k[$1];++n} END{for(i in k){print k[i]"\t"k[i]/n*100"\t"i}}' tmp | sort -k1nr
Или в недавнем GNU awk
вы можете установить PROCINFO["sorted_in"]= "@ind_num_desc"
, так что для
использует правильный порядок и вам не нужен сорт
.
Это несколько вопросов, поэтому давайте начнем с начала:
Не знаю, почему инструкции для Python 2.6 от 2012 года кажутся простейшими, но в целом следует:
sudo apt-get install python-lzma
(это бэкпорт стандартного модуля lzma, появившегося в Python3.3) или установить из PyPI с помощью pip (который должен быть установлен только один раз):
sudo apt-
pip установка pylzma
Оба эти метода позволяют удалить установку, что-то, начиная со смолы, не гарантирует. Использование pip обычно предоставляет более актуальный пакет, но не может обрабатывать зависимости системной библиотеки (поэтому может потребоваться установить пакет liblzma5
, если он еще не установлен.
Обычно bytecompile не выполняется явно, самое позднее при первом использовании, или во время установки. Но python работает нормально с файлами .py
, даже если он не может записать файл .pyc
при первом использовании (он просто начинается медленнее).
Интересно, почему импорт питона
по подсказке питона не дает ошибки. В моей системе это так, так как нет файла python.py
. Чтобы проверить наличие pylzma, следуйте инструкциям на устаревшей странице по адресу:
> > import pylzma
> > > импорт py7zlib
С помощью pip
я получил версию 0,4,6 привязок Игоря Павлова
Нет, это неправильно. Я понятия не имею, что такое \1 {3}
, но именно это вызывает у вас проблемы. Если нужно найти строки, содержащие три повторяющихся символа, а затем три других повторяющихся символа, можно использовать следующую команду:
grep -E '([a-z])\1{2}([a-z])\2{2}'
\1
относится к первой захваченной группе. Можно захватывать группы, используя круглые скобки. Затем \1
является первой такой группой, а \2
- второй и т.д. Поскольку у вас не было захваченных групп, grep
жаловался на недопустимую ссылку, так как ее не на что ссылаться. Так, в приведенном выше регексе скобки фиксируют две группы. Затем требуется {2}
, а не {3}
, так как также подсчитывается начальное совпадение.
Вы не указываете, должно ли совпадение быть словом, или вы также хотите совпадать в словах. Если вы хотите, чтобы все слово соответствовало (и исключить вещи, как aaaabbb
, используйте это вместо:
grep -wE '([a-z])\1{2}([a-z])\2{2}'
Чтобы напечатать только соответствующую часть строки (слово), а не всю строку, используйте (только GNU grep):
grep -owE '([a-z])\1{2}([a-z])\2{2}'
-121--48943- Новая системная плата работает под управлением UEFI, в то время как старая Поэтому необходимо установить grub-efi
вместо grub-pc
.