Я занимаюсь разработкой программного обеспечения для Windows в течение многих лет. Я пытаюсь разветвляться и изучать Linux. Это действительно поможет с моей новой работой.

Я поднял книгу "Awk and Sed" 2-е издание. Я использую Ubuntu 13.04; работа с окном терминала. Я работаю над книгой и столкнулся с примером, который я не могу заставить работать.

Я пытался все, что я могу найти, чтобы заставить это работать. Если я напишу пример без второго файла скрипта, он будет работать как положено. Однако, когда я пытаюсь работать в соответствии с инструкциями в книге (то есть, используя файл сценария), я получаю следующее: «byState: команда не найдена». Команда, которая терпит неудачу:

sed -f nameState list | byState

В чем моя проблема?

Вот набор данных: Список =

John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA

Первый скрипт: nameState =

s/ CA/, California/
s/ MA/, Massachusetts/
s/ OK/, Oklahoma/
s/ PA/, Pennsylvania/
s/ VA/, Virginia/

Второй скрипт: byState =

#! /bin/sh
awk -F, '{ 
    print $4 ", " $0 
    }' $* | 
sort |
awk -F, '
$1 == LastState { 
    print "\t" $2 
}
$1 != LastState { 
    LastState = $1
    print $1 
    print "\t" $2
}'

2 ответа2

0

Ваш сценарий byState может быть не исполняемым.

Пытаться:

chmod +x byState

... чтобы сделать сценарий исполняемым, затем снова попробуйте выполнить командную строку.

Дополнительно или в качестве альтернативы, поскольку Unix по умолчанию не включает текущий каталог в путь, вам может потребоваться написать:

sed -f nameState list | ./byState

... вместо

sed -f nameState list | byState
0

Вы можете попробовать это:

sed -f namestate list | sort -k 4 -t ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .