尝试从 Awk 和 Sed 书中获取示例以在 Ubuntu 13.04 上运行

尝试从 Awk 和 Sed 书中获取示例以在 Ubuntu 13.04 上运行

我已经开发 Windows 软件多年了。我正在尝试扩展并学习 Linux。这对我的新工作非常有帮助。

我拿起了《Awk 和 Sed》第二版这本书。我正在运行 Ubuntu 13.04;使用终端窗口工作。我正在阅读这本书,遇到了一个我无法运行的示例。

我已经尝试了所有能找到的方法来实现它。如果我不使用第二个脚本文件来输入示例,它会按预期工作。但是,当我尝试按照书中的说明工作时(即使用脚本文件),我得到了以下信息:“byState:未找到命令”。失败的命令是:

sed -f nameState list | byState

我的问题是什么?

以下是一组数据: List =

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
}'

答案1

您的脚本byState可能无法执行。

尝试:

chmod +x byState

...使脚本可执行,然后再次尝试命令行。

另外,或者,由于 Unix 默认不将当前目录包含在路径中,因此您可能需要编写:

sed -f nameState list | ./byState

... 代替

sed -f nameState list | byState

答案2

你可以尝试这个:

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

相关内容