1

我有这个:./awktest -v fields=`cat testfile`

应该将 fields 变量设置为 '1 2 3 4 5' 这是 testfile 包含的所有内容

它返回: gawk: ./awktest:9: fatal: cannot open file '2' for reading(没有这样的文件或目录)

当我这样做时,它工作正常。./awktest -v 字段='1 2 3 4 5'

出错时的打印字段产量:1 在第二个实例中打印字段产量:1 2 3 4 5

当我尝试使用 12345 而不是 1 2 3 4 5 时,两者都可以正常工作,因此这是空白区域的问题。这是什么问题?以及我该如何解决。

4

2 回答 2

1

这很可能不是一个awk问题。最有可能的是,你的外壳是罪魁祸首。

例如,如果 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)构造是一个 bash 快捷方式`cat file`,不需要生成外部进程。

或者,在 awk BEGIN 块中读取文件的第一行

awk '
    BEGIN {getline fields < "testfile"} 
    rest of awk program ...
'
于 2013-02-27T23:11:37.200 回答
0
./awktest -v fields="`cat testfile`"

#note that:
#./awktest -v fields='`cat testfile`'
#does not work
于 2013-02-27T22:58:27.303 回答