Параллель GNU: Мероприятие, не учрежденное (! ~)

Ядро является составной частью большей операционной системы - обычно в дистрибутивах Linux, большая операционная система содержит основу инструментов GNU, которая является, почему многие люди называют ядро Linux и полной операционной системой как "GNU/Linux" (хотя многие люди не делают это различие).

Люди называют Linux операционной системой, потому что они должны выбрать имя для обращения к полной операционной системе, которая обеспечивается суммой частей. Linux является самым низким компонентом уровня, который с готовностью видим пользователю, таким образом, естественно, что он взял бы это имя и роль. Люди обычно не обращаются к GNU grep как "GNU grep", они обычно просто называют его "grep" - многим пользователям, инструменты GNU не связаны так явно как ядро Linux.

Richard Stallman очень настойчив о наличии вызова людей Linux "GNU/Linux", так как это содержит много инструментов GNU (компилятор C, возможно, являющийся самым критическим). Я не так суечусь, и не многие другие люди, также.

Если Вы хотите ясность, GNU/Linux однозначно относится к операционной системе (а не ядро). "Linux" значительно более неоднозначен из контекста.

3
31.03.2015, 01:06
2 ответа
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
-121--39393-

При цитировании становится слишком жестким рассмотреть возможность использования функций Bash:

myfunc() {
  awk -F '\t' -v OFS='\t' '$1 { if($3 !~ /needle/){print;} ;}' "$1" > "$1".output
}
export -f myfunc

parallel myfunc {} ::: *.txt
0
27.01.2020, 21:27

Похоже на проблему с цитированием. Возможно, самым простым способом отладки является передача опции --dry-run в параллель:

$ parallel --dry-run "awk -F '\t' -v OFS='\t' '$1 { if($3 !~ /needle/){print;} ;}' {} > {}.output" ::: in
awk -F '\t' -v OFS='\t' ' { if( ~ /needle/){print;} ;}' in > in.output

Там видно, что ваши переменные $1 и $3 исчезли, и что !~ была расширена до ~ (в моем случае). Все они имеют особое значение для оболочки bash, и должны быть защищены, если они предназначены для awk, а не для awk. Попробуйте вместо этого следующее (я также изменил скрипт awk, чтобы он соответствовал вашему описанию):

parallel awk -F '\\t' -vOFS='\t' $'\'($3 !~ /needle/) { print }\'' \>{}.output {} ::: *.txt

Причина, по которой эти расширения произошли, заключается в том, что лексемы были внутри двойных кавычек (они находятся внутри одиночных кавычек внутри двойных кавычек, но оболочка оболочки касается только внешних кавычек).

Обратите внимание, что я также избегаю разбора вывода ls.

2
27.01.2020, 21:27

Теги

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