我得到了这个:./笨拙的-v fields=cat testfile
它应该将字段变量设置为“%1 2%3%4%5”,这就是测试文件包含的所有内容
它返回: gawk:./awktest:9: fatal:无法打开文件‘2’进行读取(没有这样的文件或目录)
当我这样做的时候,它工作得很好。./笨拙测试-v字段=‘1 2 3 4 5’
出错时打印字段的结果:1第二个实例中的打印字段的结果:1 2 3 4 5
当我尝试用12345而不是1 2 3 4 5时,它对两者都很好,所以这是一个空白的问题。这是什么问题?我该如何修复它。
发布于 2013-02-28 07:11:37
这很可能不是一个awk问题。最有可能的是,您的shell才是罪魁祸首。
例如,如果笨拙是:
#!/bin/bash
i=1
for arg in "$@"; do
printf "%d\t%s\n" $i "$arg"
((i++))
done然后你就会得到:
$ ./awktest -v fields=`cat testfile`
1 -v
2 fields=1
3 2
4 3
5 4
6 5您可以看到,文件内容不是作为一个单词来处理的。
简单的解决方案:在命令行中使用双引号:
$ ./awktest -v fields="$(< testfile)"
1 -v
2 fields=1 2 3 4 5$(< file)构造是不需要产生外部进程的`cat file`的bash快捷方式。
或者,读取awk BEGIN块中文件的第一行
awk '
BEGIN {getline fields < "testfile"}
rest of awk program ...
'发布于 2013-02-28 06:58:27
./awktest -v fields="`cat testfile`"
#note that:
#./awktest -v fields='`cat testfile`'
#does not workhttps://stackoverflow.com/questions/15123572
复制相似问题