到目前为止,我的脚本(script.sh)为:
#!/bin/bash/
BEGIN {
print "Author Name of Book ISBN"
print "------ ------------ ----"
}
{ printf "%-9s &s\n", 1$, 2$, 3$ }
END
然后我运行命令:
sort -k 3,3 INPUTFILE.INPUT | awk -f script.sh
上面的内容都没有按需要工作。
另请注意,输入文件的数据以逗号分隔。我还必须使用“循环”,我希望 awk 命令正在这样做。
答案1
这里有一些问题,一些会产生错误,另一些只是拼写错误或误解的结果:
-行
#!
可以删除,或者应该说#!/usr/bin/awk -f
awk
(或者您系统上的任何位置)。使用上面的#!
-line,您不必awk -f
在命令行上调用脚本,但可以./script.awk
直接使用(如果它是可执行的)。如果没有#!
-line,则需要awk -f
在命令行上使用。要引用输入数据中特定字段中的值,请使用
$n
wheren
是您所引用的字段编号,而不是n$
。格式化
printf
字符串只有一个格式占位符,但您为其提供了三段数据。它的参数周围也没有括号。该
END
块可以被移除。如果输入具有字段分隔符,例如
,
或|
,而不是在空白(空格或制表符)上分隔,则必须awk
使用 例如awk -F ','
或来说明这一点awk -F '|'
,或者通过将变量设置FS
为块中的适当字符来说明这一点BEGIN
。否则脚本将错误地分割输入记录。
这给我们留下了脚本 ( script.awk
):
BEGIN {
fmt = "%-15s\t%-15s\t%-15s\n"
printf(fmt, "Author", "Name of Book", "ISBN")
printf(fmt, "------", "------------", "----")
}
{ printf(fmt, $1, $2, $3) }
我冒昧地引入了一个格式字符串,它将三个制表符分隔字段中的每一个字段格式化为左对齐字符串。每个字段都有 15 个字符的空间。您可以通过更改块来轻松调整fmt
它BEGIN
。
调用将是
sort -t ',' -k 3,3 INPUTFILE.INPUT | awk -F ',' -f script.awk
这里,假设文件中的数据以逗号分隔(并且命令sort
已相应更改)。