gpt4 book ai didi

linux - 在 Unix 中分离 Awk 输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:21 24 4
gpt4 key购买 nike

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

我希望程序被这样调用

awk -f program_file 2/23/2013 4/15/2013

到目前为止我有:

BEGIN {
d1 = ARGV[1]
d2 = ARGV[2]
}

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

提前致谢。

最佳答案

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

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

awk -vd1="$d1" -vd2="$d2" BEGIN{split(d1,one,"/");split(d2,two,"/");...}{...}'

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

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,但你必须这样做:

kent$  echo $d1|awk -F/ '{print $1,$2,$3}'         
2 23 2013

如果你在一个短时间内传递两个变量,-F/ 将不起作用,除非它们(两个日期)在不同的行中

希望对你有帮助

关于linux - 在 Unix 中分离 Awk 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com