Для соответствия содержимому ARGV [i]
необходимо изменить тест на
, если ($2 ~ ARGV [i])
В противном случае выполняется тестирование на соответствие литералу regex 'ARGV [i]'
, что не является желаемым.
Тогда ваш сценарий будет (вроде как) работать, если вы запустите его так:
awk -f qtest.awk testing.txt «Джесси Пинкман» «Уолтер Уайт»
Но тогда он бросит ошибку, когда закончит чтение testing.txt и попытается открыть файл «Джесси Пинкман» (если, конечно, вы
Другими словами, ARGV содержит имена файлов , переданные вашему сценарию оболочкой, и не следует пытаться использовать его для передачи произвольных аргументов. Обычным способом передачи нефайловых аргументов в сценарий awk является использование синтаксиса -v var = val
для инициализации переменных в сценарии.
Но я подозреваю, что лучшим подходом здесь является чтение testing.txt в вашем блоке BEGIN, использование синтаксиса getline var < namefile.txt
, разделение данных (с помощью функции split ()
) и сохранение разделенных данных в 2D массиве. Затем основной цикл обработки может считывать имена (из файла или от пользователя), а затем тестировать эти имена с помощью данных, сохраненных в массиве.
Команда sudo
является фронтэнд-программой, которая принимает аргументы, переключатели и команды. Большинство команд могут принимать аргументы и переключатели, но некоторые могут выполнять другие команды. Подумайте о них как об обертках, если хотите.
Поэтому sudo
создаст совершенно новый экземпляр Bash (с повышенными привилегиями в качестве корня), а затем выполнит предоставленную команду.
Поэтому в этом случае sudo
запускает программу pip3
+ все аргументы, которые возникают после нее. Эти аргументы относятся к pip3
, а не к sudo
. ПРИМЕЧАНИЕ: имейте в виду этот шаблон, когда вы видите sudo
:
$ sudo <switches> "<command> <command's arguments + switches>"
Эти команды часто являются большим количеством информации, когда вы не уверены, что они делают. Большинство из них дадут краткий обзор того, как их использовать и что они делают, если запустить их с переключателем -help
. Это может варьироваться, иногда это -help
или даже -h
.
Не установлено pip3
, но установлено pip2
. Фактически они являются одним и тем же инструментом, но pip3
является более новой версией.
$ pip2 --help
Usage:
pip <command> [options]
Commands:
install Install packages.
uninstall Uninstall packages.
freeze Output installed packages in requirements format.
list List installed packages.
show Show information about installed packages.
search Search PyPI for packages.
zip Zip individual packages.
unzip Unzip individual packages.
bundle Create pybundles.
help Show help for commands.
General Options:
-h, --help Show help.
-v, --verbose Give more output. Option is additive, and can be used up to 3 times.
-V, --version Show version and exit.
-q, --quiet Give less output.
--log <file> Log file where a complete (maximum verbosity) record will be kept.
--proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout <sec> Set the socket timeout (default 15 seconds).
--exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert <path> Path to alternate CA bundle.
--help
показывает нам, что этот инструмент может принимать с точки зрения команд и переключателей, но не говорит нам, что он делает. Посмотрим, где он находится. Для этого можно использовать команду type
:
$ type -a pip2
pip2 is /usr/bin/pip2
pip2 is /bin/pip2
Обратите внимание, что она находится в /usr/bin
и /bin
. Это означает, что наш менеджер пакетов установил этот инструмент. В дистрибутиве на базе Red Hat вы можете использовать rpm
, чтобы узнать, какой пакет этот исполняемый файл, pip2
, принадлежит.
$ rpm -qf /bin/pip2
file /bin/pip2 is not owned by any package
Интересно, поэтому этот исполняемый файл не управляется как часть средства управления пакетами, rpm
.
Ну, мы далеки от смерти. Посмотрим, сможет ли система дать нам какие-либо дополнительные подсказки относительно того, что установлено pip2
.
Большинство Linux distros поставляются с mlocate
, инструментом, который периодически создает индекс всех файлов, которые находятся на жестком диске. Таким образом, мы можем искать pip2
, чтобы получить подсказки о других местах, где его части могут таиться.
$ locate pip2
/usr/bin/pip2
/usr/bin/pip2.7
Итак, мы знаем, что установлены 2 версии, 2 и 2.7. Но это не очень помогло, так что давайте сделаем сеть немного шире и искать просто pip
. Кроме того, мы собираемся фильтровать результаты немного и получить только результаты, которые заканчиваются pip
. Для этого мы используем grep
.
$ locate pip | grep 'pip$'
/home/saml/.pip
/home/saml/dotfiles/.pip
/home/saml/dotfiles/.pyenv/shims/pip
/home/saml/dotfiles/.pyenv/versions/3.2.5/bin/pip
/home/saml/dotfiles/.pyenv/versions/3.2.5/lib/python3.2/site-packages/pip-1.3.1-py3.2.egg/pip
/opt/ec2-api-tools/bin/ec2apip
/opt/ec2-api-tools/bin/ec2upip
/usr/bin/pip
/usr/bin/python-pip
/usr/lib/python2.7/site-packages/pip
Наконец-то! Полезная информация. pip2
- это инструмент, используемый при установке Python. Итак, если мы пойдем в Google и посмотрим «pip python»:
О! pip2
является диспетчером пакетов для Python.
Команда устанавливает файл .whl
для установки Python.
можно разделить на ноль.
G=$(($((M=$((K=1024))*$K))*$K))
IF=./source_file SKIP=$((3*$M))
dd "if=$IF" "skip=$(($SKIP/($SKIP<$(wc -c <"$IF"))))"
Это значение равно «$ SKIP/1»
или «$ SKIP/0»
. По правде говоря, это не dd
, который возвращает ложь, но оболочка - это означает, что dd
никогда даже не вызывается, но wc
, конечно. Возможно, также стоит работать в субоболочке, так как неинтерактивная оболочка, скорее всего, выйдет в противном случае.
Это также основной пример bs = 1
- в большинстве случаев вам, вероятно, придется учитывать размер блока или использовать флаг skip-bytes GNU.