首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk in循环‘奇迹地’改变了-v选项中的变量值

awk in循环‘奇迹地’改变了-v选项中的变量值
EN

Stack Overflow用户
提问于 2019-08-28 04:55:17
回答 1查看 42关注 0票数 1

我正在与awk作斗争。我在shell脚本的循环中使用awk,并使用-v选项传递具有相同值的相同变量。然而,在循环的第二段中,变量将其值从"2“更改为"6”?我做错了什么?

我试图更改print表达式的语法,但不管怎样,awk的三行代码中的第一行非常简单:-/

代码语言:javascript
运行
复制
#!/bin/sh
dows="1%2C2%2C3%2C4%2C5 0%2C6"
day=2
count=2
echo $dows
num=1
while [ "$num" -le $count ]
do
    thisdow=$(echo $dows | awk -v var="$num" '{print $var}')
    echo "this days of week are: $thisdow"
    echo "this day is $day"
    echo "control day"
    echo $(echo $thisdow | awk -v var="$day" 'BEGIN { FS = "%2C" }; {for(i=1; i<=NF; i++){print $var}}')
    echo "control days of week"
    echo $(echo $thisdow | awk 'BEGIN { FS = "%2C" }; {for(i=1; i<=NF; i++){print $i}}')
    echo "difference"
    echo $(echo $thisdow | awk -v var="$day" 'BEGIN { FS = "%2C" }; {for(i=1; i<=NF; i++){print ($i - $var + 7) % 7}}')
    num=$(expr $num + 1)
done

如果代码片段有点长,很抱歉,但我真的一无所知。也许是某种内存泄漏,但我不知道在哪里可以进一步缩小范围……第一个awk代码行第一次输出2 2 2 2 2 2,这是我所期望的,第二次输出6 6,这让我感到困惑。下面是完整的输出

代码语言:javascript
运行
复制
1%2C2%2C3%2C4%2C5 0%2C6
this days of week are: 1%2C2%2C3%2C4%2C5
this day is 2
control day
2 2 2 2 2
control days of week
1 2 3 4 5
difference
6 0 1 2 3
this days of week are: 0%2C6
this day is 2
control day
6 6  <---- this is what drives me insane...
control days of week
0 6
difference
1 0

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-28 05:40:00

好吧,我知道这会是件很愚蠢的事情。必须省略'$‘,否则$var会被解释为第二个字段,这恰好在第一次通过循环时工作,代码中正确的awk行应该是(只有第一行)

代码语言:javascript
运行
复制
echo $(echo $thisdow | awk -v var="$day" 'BEGIN { FS = "%2C" }; {for(i=1; i<=NF; i++){print var}}')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57682148

复制
相关文章

相似问题

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