如何解决awk和for循环,具有多个变量
我正在尝试编写awk脚本以从txt文件读取数据,该文件需要具有三个变量的循环。尝试过C之类的语法和嵌套循环,但没有运气。
根据下面的链接,awk也不支持类似C的语法。
https://www.gnu.org/software/gawk/manual/html_node/For-Statement.html
增量部分也是如此。递增其他变量需要在循环结束时使用单独的语句。在这种情况下,使用C的逗号运算符的C复合表达式很有用,但awk不支持。
tst.awk
BEGIN { FS="," }
{
printf "echo %s ",$1
for (i=3; i<=NF;i=i+3) {
printf " command1 " $i " command2 " $4 " command3 " $5,$i
}
print "command3"
}
test.txt
"a","b","c","d","e","f","g","h"
"m","n","o","p","q","r","s","t"
输出:
echo "a" command1 "c" command2 "d" command3 "e" command1 "f" command2 "d" command3 "e"command3
echo "m" command1 "o" command2 "p" command3 "q" command1 "r" command2 "p" command3 "q"command3
预期输出:
echo "a" command1 "c" command2 "d" command3 "e" command1 "f" command2 "g" command3 "h"command3
echo "m" command1 "o" command2 "p" command3 "q" command1 "r" command2 "s" command3 "t"command3
解决方法
请注意<div class="adjustable">
<div class="fivebox" id="trand1">
<p>test</p>
</div>
<div class="fivebox">
<p>test</p>
</div>
<div class="fivebox">
<p>test</p>
</div>
<div class="fivebox">
<p>test</p>
</div>
<div class="fivebox">
<p>test</p>
</div>
</div>
。第一个参数是格式字符串,扫描printf
个字符。
在您输入的情况下,该错误代码将起作用:
%
更佳的是awk -F"," '
{
printf "echo %s ",$1
for (i=3; i<=NF;i=i+3) {
printf " command1 " $i " command2 " $(i+1) " command3 " $(i+2)
}
print " command3"
}' test.txt
:
printf
,
另一种方法是从当前循环索引向后看,并基于$(i-2)
,$(i-1)
,$i
输出。那将需要以i=5
开始,例如
awk -F,'{
printf "echo %s ",$1
for (i = 5; i <= NF; i += 3)
printf " command1 %s command2 %s command3 %s",$(i-2),$(i-1),$i
print ""
}' test.txt
在这种情况下,您将产生所需的输出:
echo "a" command1 "c" command2 "d" command3 "e" command1 "f" command2 "g" command3 "h"
echo "m" command1 "o" command2 "p" command3 "q" command1 "r" command2 "s" command3 "t"
使用awk
来换个方式的另一种方式。
您真的要额外的命令3吗?
您的输出显示您最后需要一个附加的command3
。这似乎很尴尬,但是如果需要的话,只需将其添加到最后的print
中即可,例如,完成后输出换行符,例如
print "command3"
您的输出是:
echo "a" command1 "c" command2 "d" command3 "e" command1 "f" command2 "g" command3 "h"command3
echo "m" command1 "o" command2 "p" command3 "q" command1 "r" command2 "s" command3 "t"command3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。