首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unix中分离Awk输入

在Unix中分离Awk输入
EN

Stack Overflow用户
提问于 2013-03-22 21:37:15
回答 4查看 130关注 0票数 1

例如,我正在尝试编写一个Awk程序,它以/ so 3/ 22 /2013分隔两个日期,并将它们分解为三个单独的数字,以便我可以分别处理3、22和2013。

我希望这个程序的名字是这样的

代码语言:javascript
复制
awk -f program_file 2/23/2013 4/15/2013

到目前为止,我有:

代码语言:javascript
复制
BEGIN {
d1 = ARGV[1]
d2 = ARGV[2]
}

这将接受两个日期,但我不确定如何将它们分开。此外,上面的程序必须用nawk调用,awk说它不能打开2/23/2013。

提前谢谢。

EN

Stack Overflow用户

发布于 2013-03-22 21:52:36

你不能用你的方式做这件事。因为awk认为你有两个文件作为输入。也就是说,您的日期字符串被视为文件名。这就是您收到该错误消息的原因。

如果这两个日期存储在shell变量中,您可以:

代码语言:javascript
复制
awk -vd1="$d1" -vd2="$d2" BEGIN{split(d1,one,"/");split(d2,two,"/");...}{...}'

...部分是您的逻辑,在上面的行中,拆分的部分存储在数组onetwo中。例如,您只想打印one的元素

代码语言:javascript
复制
kent$  d1=2/23/2013
kent$  d2=4/15/2013
kent$  awk -vd1="$d1" -vd2="$d2"  'BEGIN{split(d1,one,"/");split(d2,two,"/"); for(x in one)print one[x]}'
2
23
2013

或者像其他人建议的那样,你可以使用awk的FS,但你必须这样做:

代码语言:javascript
复制
kent$  echo $d1|awk -F/ '{print $1,$2,$3}'         
2 23 2013

如果在短时间内传递两个var,-F/将无法工作,除非它们(两个日期)在不同的行中

希望能有所帮助

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15571747

复制
相关文章

相似问题

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