[1131969]Двоичный пакет Debian не должен содержать файлов в [1132360]/opt[1132361]. Согласно FHS, это только для локально установленных пакетов. Он будет помечен [1132362]флагом lintian[1132363]. Это заработает автоматический отказ Debian, если он пройдёт мимо вашего спонсора. Ни один пакет в официальных архивах не имеет файлов в [1132364]/opt[1132365]. Помещение исполняемых файлов пользовательского уровня на верхний уровень [1132366]/usr/bin[1132367] является правильным. Почему вы хотите, чтобы исполняемые файлы находились в поддиректории? В любом случае, создание поддиректории в [1132368]/usr/bin[1132369] для ваших исполняемых файлов не сработает, потому что поддиректория не будет находиться в пути.
Вероятно, не стоит пытаться вырезать вырезать
. На самом деле, попытка объединить конвейер в один процесс для обработки 32M входных строк, скорее всего, отрицательно скажется на общем времени выполнения вашей задачи. Однако это зависит от типа компьютера, на котором вы выполняете задание.
Если машина, на которой вы обрабатываете данные, имеет несколько процессорных ядер, то, вообще говоря, консолидация цикла задания в один процесс означает консолидацию всего задания на одном процессорном ядре. Это может быть желательно на системах с одним процессорным ядром, или если общее процессорное время дорого, но, по моему опыту, лучше насытить процессор и использовать все ядра одновременно, чтобы быстрее завершить задачу.
Тем не менее, вы определенно можете grep
только второе поле:
grep -E $'\t(.* )?yellow( .*)?\t' <infile
... этот шаблон будет соответствовать только строкам, которые встречаются между двумя символами табуляции в строке, и будет соответствовать только тем строкам, которые ограничены с обеих сторон либо пробелом, либо одной из табуляций, разделяющих поля. В GNU grep
вы также можете добавить переключатель -m
ax match для ограничения вывода не более чем 10K совпадений. И так...
grep -m10000 -E $'\t(.* )?yellow( .*)?\t' <infile | cut -f3
... будет достаточно для выполнения всей работы.
Есть много способов сделать это. Самый простой, вероятно, с awk
$ awk -F$'\t' '$2 = /helicopter/ {print $3}' input.txt | head -n 10000
0/3/3032.jpg
0/3/3034.jpg
-F $ '\ t'
устанавливает разделитель полей на TAB $ 2 = / Helicopter /
соответствует только в поле 2 print $ 3
печатает поле 3 при совпадениях Если вы хотите, чтобы полные слова соответствовали без учета регистра, попробуйте следующее:
awk -F$'\t' 'tolower($2) ~ /\<helicopter\>/ { print $3}' input.txt | head -n 10000
\ <
и \>
(маркеры границ слова), вероятно работает только с gawk
, что является стандартным для Linux. Также обратите внимание, что оператор сравнения изменился с =
на ~
.
Вы также можете попробовать установить LC_ALL = C
локально в своей среде.
Если LC_ALL
является локалью UTF8, то это может означать, что grep необходимо выполнить декодирование UTF8 во входном потоке перед сопоставлением, и это может значительно замедлить grep