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

У меня такая же проблема с usb2 pny 32gb ntfs отформатированным pendrive. Проблема с возвратом в ядро ​​3.8.0-27 решает проблему. Я запускаю xubuntu 13.04 64 бит.

Кажется, все в порядке с моими usb2 kingston ntfs pendrives, так что, возможно, связанный с чипом чипсет марки с этим ядром?

Может кто-нибудь подтвердить, что это новая ошибка? [!d2 ]

1
задан 11 June 2015 в 20:45

4 ответа

ПРИМЕЧАНИЕ. Хорошей практикой является использование кавычек вокруг переменной, с которой вы работаете, так что это единственная переменная, которую вы имеете. Кроме того, чтобы вы не вводили новые переменные.

Есть несколько других способов достижения одного и того же результата.

Ниже перечислены некоторые из них.

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

или

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

, или если вы хотите, чтобы новая переменная, в соответствии с подстановкой команды, использовала обратные элементы «` »и« $ (command) », все еще являются действительными способами достижения результатов, которые вы после. Более подробную информацию можно найти здесь.

с отметками обратного хода:

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», которая присваивается то, что вы указали.

5
ответ дан 23 May 2018 в 19:55

Все, что вам нужно, это добавить echo $abc вместо $abc, например:

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

2
ответ дан 23 May 2018 в 19:55
  • 1
    Кто-то удалил вам точку, потому что они чувствуют, что вам нужны котировки вокруг $ abc и т. Д. Что не так. Ваша команда отлично работает. Я даже проверил его. – Terrance 12 June 2015 в 16:29
  • 2
    @ Терренс, я приостановил это. Хорошая практика заключается в добавлении котировок, но в этом конкретном случае это откровенно необязательно – Sergiy Kolodyazhnyy 12 June 2015 в 17:04
  • 3
    Это не то, что я имел в виду, и цитаты подходят для использования. Я хочу сказать, ваш ответ работает. Другие ответы здесь работают. Я проверил ваш, и он отлично работает, и я дал вам +1. Кто-то оставил вас в стороне от вашего ответа, который отлично работает. Все это действительно необязательно. Я просто давал вам знать, что ваш downvote - это все. – Terrance 12 June 2015 в 17:06

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

О, @heemayl, вы забыли процитировать $ 1 в своем примере, что равно как и поставить цитату вокруг этой переменной doesn ' т.

1
ответ дан 23 May 2018 в 19:55
  • 1
    Если вы хотите, чтобы какой-либо ответ от меня прокомментировал мой ответ, если вы используете " @ heemayl " в вашем ответе я не буду уведомлен :) .. Теперь о $1, $1 в awk '{print $1}' будет обрабатываться awk не оболочкой, поэтому OP использует одинарные кавычки вокруг '{print $1}', поэтому эта оболочка не расширяет ее заранее .... в результате здесь двойное цитирование вокруг $1 избыточно. – heemayl 12 June 2015 в 20:31
  • 2
    Я на самом деле пытался, но не мог оставить комментарий к вашему сообщению. Похоже, мне нужны еще две точки (хочешь поднять меня так, я могу? :-) – Scott McGee 12 June 2015 в 21:09
  • 3
    Я поддержал другой ответ, так как этот ответ в какой-то степени вызывает прямое противоречие с моим ответом. – heemayl 12 June 2015 в 21:15

В вашей команде ... $($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
ответ дан 23 May 2018 в 19:55
  • 1
    Кто-то удалил вам точку, потому что они чувствуют, что вам нужны котировки вокруг $ abc и т. Д. Что не так. Ваша команда отлично работает. Я даже проверил его. – Terrance 12 June 2015 в 16:30
  • 2
    @ Полностью спасибо за комментарий :) – A.B. 12 June 2015 в 16:47
  • 3
    Downvoters, где проблема? – A.B. 12 June 2015 в 16:48
  • 4
    У вас тоже есть мой +1. Мне действительно нравится видеть все разные способы достижения одной и той же цели. Иногда проще, когда-то более сложным, но всегда приятно видеть другие способы! Спасибо! – Terrance 12 June 2015 в 17:39

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

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