我正在与awk作斗争。我在shell脚本的循环中使用awk,并使用-v选项传递具有相同值的相同变量。然而,在循环的第二段中,变量将其值从"2“更改为"6”?我做错了什么?
我试图更改print表达式的语法,但不管怎样,awk的三行代码中的第一行非常简单:-/
#!/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
,这让我感到困惑。下面是完整的输出
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
有什么想法吗?
发布于 2019-08-28 05:40:00
好吧,我知道这会是件很愚蠢的事情。必须省略'$‘,否则$var会被解释为第二个字段,这恰好在第一次通过循环时工作,代码中正确的awk行应该是(只有第一行)
echo $(echo $thisdow | awk -v var="$day" 'BEGIN { FS = "%2C" }; {for(i=1; i<=NF; i++){print var}}')
https://stackoverflow.com/questions/57682148
复制相似问题