数组 – 在循环期间重新分配awk数组
发布时间:2020-12-14 00:43:37 所属栏目:Linux 来源:网络整理
导读:我的问题如下: 我有一个格式化的文本文件: 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 78 orange 12 prune 12 prune 78 berries 78 cake 我需要的是在表单中重新分配值: 12 apple,prune 78 orange,berries,cake 我用awk {sbj = $2“,”; a [$1] = a [$1] sbj} END {for(i in a)print i,a [i]} 12 apple one 78 orange one 12 prune two 12 prune two 78 berries two 78 cake two 欲望输出是: 12 apple one 78 orange one 12 prune two 78 berries,cake two 我试图混合awk和bash,但它没有帮助.我现在唯一可以做的选择是将每个系列(“一个”,“两个”)存储到单独的文件中,并使用上面的代码单独处理它们,然后将所有数组汇总到一个文件中.但这是一个笨重而笨拙的解决方案.有没有选项让它在同一个文件中? 解决方法$cat tst.awk NF { if (!seen[$1,$2]++) { arr[$1] = ($1 in arr ? arr[$1] "," OFS : "") $2 sfx[$1] = $3 } 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 file 12 apple one 78 orange one 12 prune two 78 berries,cake two 请注意,上面将按照随机顺序打印输出行 – 如果要保留原始输入顺序,则在保存值时需要额外的步骤.然而,它将以与它们在输入中出现的顺序相同的顺序打印块和$2值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容