数组 – 在循环期间重新分配awk数组

数组 – 在循环期间重新分配awk数组,第1张

概述我的问题如下: 我有一个格式化的文本文件: 12 apple 78 orange 12 prune12 prune78 berries78 cake 我需要的是在表单中重新分配值: 12 apple, prune78 orange, berries, cake 我用awk {sbj = $2“,”; a [$1] = a [$1] sbj} END {for(i in a)print 我的问题如下:
我有一个格式化的文本文件:

12 apple 78 orange 12 prune12 prune78 berrIEs78 cake

我需要的是在表单中重新分配值:

12 apple,prune78 orange,berrIEs,cake

我用awk {sbj = $2“,”; a [$1] = a [$1] sbj} END {for(i in a)print i,a [i]}
但问题是,现在我有了这个文件,格式为:

12 apple one78 orange one12 prune two12 prune two78 berrIEs two78 cake two

欲望输出是:

12 apple one78 orange one12 prune two78 berrIEs,cake two

我试图混合awk和bash,但它没有帮助.我现在唯一可以做的选择是将每个系列(“一个”,“两个”)存储到单独的文件中,并使用上面的代码单独处理它们,然后将所有数组汇总到一个文件中.但这是一个笨重而笨拙的解决方案.有没有选项让它在同一个文件中?
谢谢你的任何提示.

解决方法
$cat tst.awkNF {    if (!seen[,]++) {        arr[] = ( in arr ? arr[] "," OFS : "")         sfx[] =     }    next}{ prt() }END { prt() }function prt(   i) {    for (i in arr) {        print i,arr[i],sfx[i]    }    print ""    delete sfx    delete arr    delete seen}$awk -f tst.awk file12 apple one78 orange one12 prune two78 berrIEs,cake two

请注意,上面将按照随机顺序打印输出行 – 如果要保留原始输入顺序,则在保存值时需要额外的步骤.然而,它将以与它们在输入中出现的顺序相同的顺序打印块和$2值.

总结

以上是内存溢出为你收集整理的数组 – 在循环期间重新分配awk数组全部内容,希望文章能够帮你解决数组 – 在循环期间重新分配awk数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1024446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存