计算变量中的实例,然后在 bash 脚本中重新格式化行/列

计算变量中的实例,然后在 bash 脚本中重新格式化行/列

在批量提交脚本中,我生成了一个名为“nodefile.123”的文件,如下所示:

熊-pg0208u33b

熊-pg0208u33b

熊-pg0208u33b

熊-pg0210u19a

熊-pg0210u19a

熊-pg0210u07a

每行始终有 1 个条目,这是我的程序要运行的每个核心的位置,因此 -33b 上有 3 个核心,-19a 上有 2 个核心,-07a 上有 1 个核心。我需要计算每个节点的核心数量并格式化数据,如下所示:

熊-pg0208u33b:3:熊-pg0210u19a:2:熊-pg0210u07a:1

到目前为止我有以下代码:

排序节点文件.3314190 | uniq -c > 排序.txt

rev="$(awk '{for(i=NF;i>=1;i--) printf "%s ", $i;print ""}' Sorted.txt)"

它计算并反转了输入。我相信我现在需要将它们变成一行并将空格更改为冒号?

答案1

您可以使用awk

awk 'BEGIN{c=1;OFS=":";ORS=":"} {if(u!=$0 && u!=""){print u,c;u=$0;c=1} else if(u!=$0){u=$0}else{c=c+1}} END{ORS="";print u,c;}' file

并且您的文件不应该有空行,因此您可以像这样删除它们:

sed -i '/^$/d' file

相关内容