在批量提交脚本中,我生成了一个名为“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