我有这个: ./awktest -v fields =`cat testfile`
应该将字段变量设置为'1 2 3 4 5',这就是testfile包含的所有内容
它返回: gawk:./ awktest:9:致命:无法打开文件`2'进行阅读(没有这样的文件或目录)
当我这样做时,它工作正常。 ./awktest -v fields ='1 2 3 4 5'
错误产生时的打印字段: 1 在第二个实例中打印字段产生: 1 2 3 4 5
当我用12345而不是1 2 3 4 5尝试它时,两者都可以正常工作,所以这是白色空间的问题。这是什么问题?我该如何解决呢。
答案 0 :(得分:1)
这很可能不是awk
问题。最有可能的是,你的 shell 是罪魁祸首。
例如,如果awktest是:
#!/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 ...
'
答案 1 :(得分:0)
./awktest -v fields="`cat testfile`"
#note that:
#./awktest -v fields='`cat testfile`'
#does not work