Команда не найдена ошибка awk

Я получаю эту command not found ошибку в этом коде. Я хочу напечатать первое слово предложения

Первый код (нужен результат = 1)

abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found

Второй код (нужен результат = mp4)

abc="mp4 hello world"; L=$($abc|awk '{print $1}'); echo $L
No command 'mp4' found, did you mean:
 Command 'mpp' from package 'makepp' (universe)
 Command 'mpy' from package 'yorick-mpy-mpich2' (universe)
 Command 'mpy' from package 'yorick-mpy-openmpi' (universe)
 Command 'mpc' from package 'mpc' (universe)
 Command 'm4' from package 'm4' (main)
 Command 'mp4h' from package 'mp4h' (universe)
 Command 'mpv' from package 'mpv' (universe)
 Command 'mpd' from package 'mpd' (universe)
 Command 'mp' from package 'mp' (universe)
 Command 'mpb' from package 'mpb' (universe)
2
задан 11 June 2015 в 20:45

5 ответов

Вам нужно echo для передачи переменной abc STDOUT так, чтобы awk мог использовать его в качестве STDIN. Хотя Вы ушли бы в этом случае, но всегда заключают переменные в кавычки (и управляют заменой), если у Вас нет очень серьезного основания не к (например, Вы хотите, чтобы расширение пути и слово, плюющее, произошли):

$ abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
1

$ abc="mp4 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
mp4

можно также использовать здесь строки:

$ abc="1 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
1

$ abc="mp4 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
mp4
0
ответ дан 11 June 2015 в 20:45

ПРИМЕЧАНИЕ: это - хорошая практика для помещения кавычек вокруг переменной, Вы работаете с тем, так, чтобы это была единственная переменная, которую Вы имеете. Также так, чтобы Вы не представляете новые переменные в.

существуют некоторые другие способы достигнуть того же результата.

у меня есть некоторые упомянутые ниже.

abc="1 hello world"; echo "$abc" | awk '{print $1}'

или

abc="mp4 hello world" && echo "$abc" | awk '{print $1}'

или если Вы хотите новую переменную, согласно замене команды, обе обратных галочки использования "`"; и "$ (команда)" являются все еще допустимыми способами достигнуть результатов, которые Вы после. Больше информации может быть найдено здесь .

с метками обратной галочки:

abc="mp4 hello world"; L=`echo "$abc" | awk '{print $1}'`; echo "$L"

с "$ (команда)":

abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"

оба произведут новый переменный "$L", который присвоен тому, что Вы определили.

0
ответ дан 11 June 2015 в 20:45

Все, в чем Вы нуждаетесь, должно добавить echo $abc вместо $abc, как так:

abc="1 hello world"; L=$(echo $abc|awk '{print $1}'); echo $L

0
ответ дан 11 June 2015 в 20:45

Проблема с исходным кодом, как был упомянут, состоит в том, что он пропускает эхо. Однако, хотя другой плакат упомянул, что необходимо всегда заключать переменные в кавычки, это неправильно. Часто заключение в кавычки переменной поможет разрешить возможное неоднозначное имя переменной, оно часто вызывает другие проблемы путем вмешательства в другое заключение в кавычки. Корректный способ определить переменную, в таких случаях, был бы использованием фигурных скобок вокруг имени переменной, не заключил бы в кавычки вокруг целой переменной. Например, исходный код мог быть переписан как: abc="1 hello world"; L=$(echo ${abc}|awk '{print $1}'); echo ${L}

, О, @heemayl, Вы забыли заключать 1$ в кавычки в своем примере, который является, точно так же как помещение кавычки вокруг той переменной не работает.

0
ответ дан 11 June 2015 в 20:45

В Вашей команде ... $($abc|awk '{print $1}'); ... содержание $abc выполняется как команда. Поэтому ошибка.

можно протестировать это в терминале с:

$ 1 your text
1: command not found

Исправляют Вашу версию:

abc="1 hello world"; L=$(echo "$abc"|awk '{print $1}'); echo $L

или использование более короткая версия:

awk '{print $1}' <<< $(echo "1 your text")

Пример

% awk '{print $1}' <<< $(echo "1 hello world")
1

% awk '{print $1}' <<< $(echo "mp4 hello world")        
mp4
0
ответ дан 11 June 2015 в 20:45

Другие вопросы по тегам:

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