
我有一个格式化的文本文件:
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数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)