首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过内联设置awk变量

通过内联设置awk变量
EN

Stack Overflow用户
提问于 2013-02-28 06:18:01
回答 2查看 45关注 0票数 1

我得到了这个:./笨拙的-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时,它对两者都很好,所以这是一个空白的问题。这是什么问题?我该如何修复它。

EN

回答 2

Stack Overflow用户

发布于 2013-02-28 07:11:37

这很可能不是一个awk问题。最有可能的是,您的shell才是罪魁祸首。

例如,如果笨拙是:

代码语言:javascript
复制
#!/bin/bash
i=1
for arg in "$@"; do
  printf "%d\t%s\n" $i "$arg"   
  ((i++))
done

然后你就会得到:

代码语言:javascript
复制
$ ./awktest -v fields=`cat testfile`
1   -v
2   fields=1
3   2
4   3
5   4
6   5

您可以看到,文件内容不是作为一个单词来处理的。

简单的解决方案:在命令行中使用双引号:

代码语言:javascript
复制
$ ./awktest -v fields="$(< testfile)"
1   -v
2   fields=1 2 3 4 5

$(< file)构造是不需要产生外部进程的`cat file`的bash快捷方式。

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

代码语言:javascript
复制
awk '
    BEGIN {getline fields < "testfile"} 
    rest of awk program ...
'
票数 1
EN

Stack Overflow用户

发布于 2013-02-28 06:58:27

代码语言:javascript
复制
./awktest -v fields="`cat testfile`"

#note that:
#./awktest -v fields='`cat testfile`'
#does not work
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15123572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档