当我运行以下程序时,我得不到回复,但是程序仍然会一直运行直到我结束它。请问有人可以告诉我为什么会这样。我试图让这个复杂的awk语句起作用,但是,它已经非常不成功了。
我用于我的Cshell的代码是(它全部在一行,但我把它拆分到这里以便于阅读):
awk '{split($2,b,""); counter = 1; while (counter < 13)
{if (b[counter] == 1 && "'$cmonth'" > counter)
{{printf("%s%s%s\n", $1, "'$letter'","'$year3'")}; counter++;
else if (b[counter] == 1 && "'$cmonth'" <= counter)
{{printf("%s%s%s\n", $1, "'$letter'","'$year2'")}; counter++;}
else echo "fail"}}' fileRead >> $year$month
我正在阅读的文本文件看起来像
fff 101010101010
yyy 100100100100
$ year2和$ year3代表从1987年开始的计数器,每行读取时间为1年 $ cmonth只是1-12个月的柜台 $ letter只是一个ID
如果字节代码中的位置为1,程序的目标是读取每一行并打印出ID,月和年。
答案 0 :(得分:1)
你有一些不匹配的花括号,我已经重新格式化为一种缩进标准。
awk '{ \
split($2,b,""); counter = 1 \
while (counter < 13) { \
if (b[counter] == 1 && "'$cmonth'" > counter){ \
printf("%s%s%s\n", $1, "'$letter'","'$year3'") \
counter++ \
} \
else if (b[counter] == 1 && "'$cmonth'" <= counter) { \
printf("%s%s%s\n", $1, "'$letter'","'$year2'") \
counter++ \
} \
else print "fail" \
} # while \
}' fileRead >> $year$month
awk也不支持echo
。
确保\
是该行的最后一个字符(没有空格或制表符!!!),否则您将收到语法错误。
否则,您可以将所有行“折叠”成一行。偶尔添加';'根据需要。
修改强>
或者你可以使用这个awk脚本的先前版本(没有\
行继续字符),把它放在一个文件中(没有' ....'
之外的任何元素(单引号)并将其作为文件从awk中调用。您还需要这样做,以便传递变量cmonth,letter,year2以及我错过的任何其他变量。
**
awk -v letter="$letter" -v year2="$year2" -v month="$month" -f myScript fileRead >> $year$month
**
例如
printf("%s%s%s\n", $1, "'$letter'","'$year2'")
变为
printf("%s%s%s\n", $1, letter,year2)
IHTH。