Ядро является составной частью большей операционной системы - обычно в дистрибутивах Linux, большая операционная система содержит основу инструментов GNU, которая является, почему многие люди называют ядро Linux и полной операционной системой как "GNU/Linux" (хотя многие люди не делают это различие).
Люди называют Linux операционной системой, потому что они должны выбрать имя для обращения к полной операционной системе, которая обеспечивается суммой частей. Linux является самым низким компонентом уровня, который с готовностью видим пользователю, таким образом, естественно, что он взял бы это имя и роль. Люди обычно не обращаются к GNU grep как "GNU grep", они обычно просто называют его "grep" - многим пользователям, инструменты GNU не связаны так явно как ядро Linux.
Richard Stallman очень настойчив о наличии вызова людей Linux "GNU/Linux", так как это содержит много инструментов GNU (компилятор C, возможно, являющийся самым критическим). Я не так суечусь, и не многие другие люди, также.
Если Вы хотите ясность, GNU/Linux однозначно относится к операционной системе (а не ядро). "Linux" значительно более неоднозначен из контекста.
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
Похоже на проблему с цитированием. Возможно, самым простым способом отладки является передача опции --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
.