我们有以下文件
more /home/list.in
master01.fsdns.com AMBARI_METRICS STARTED
master02.fsdns.com AMBARI_METRICS STARTED
master03.fsdns.com AMBARI_METRICS STARTED
worker01.fsdns.com AMBARI_METRICS STARTED
worker02.fsdns.com AMBARI_METRICS STARTED
worker03.fsdns.com AMBARI_METRICS STARTED
worker05.fsdns.com AMBARI_METRICS STARTED
worker06.fsdns.com AMBARI_METRICS STARTED
worker07.fsdns.com AMBARI_METRICS STARTED
worker08.fsdns.com AMBARI_METRICS STARTED
worker09.fsdns.com AMBARI_METRICS STARTED
master01.fsdns.com YARN STARTED
master02.fsdns.com YARN STARTED
master03.fsdns.com YARN STARTED
worker01.fsdns.com YARN STARTED
worker02.fsdns.com YARN STARTED
worker03.fsdns.com YARN STARTED
worker05.fsdns.com YARN STARTED
worker06.fsdns.com YARN STARTED
worker07.fsdns.com YARN STARTED
worker08.fsdns.com YARN STARTED
worker09.fsdns.com YARN STARTED
master01.fsdns.com HDFS STARTED
master02.fsdns.com HDFS STARTED
master03.fsdns.com HDFS STARTED
worker01.fsdns.com HDFS STARTED
worker02.fsdns.com HDFS STARTED
worker03.fsdns.com HDFS STARTED
worker05.fsdns.com HDFS STARTED
worker06.fsdns.com HDFS STARTED
worker07.fsdns.com HDFS STARTED
worker08.fsdns.com HDFS STARTED
worker09.fsdns.com HDFS STARTED我们希望将文件- list.in重新排序到以下结构(预期结果)
因此,与机器编号相关的所有行都在同一组中。
预期结果
master01.fsdns.com AMBARI_METRICS STARTED
master01.fsdns.com YARN STARTED
master01.fsdns.com HDFS STARTED
master02.fsdns.com AMBARI_METRICS STARTED
master02.fsdns.com YARN STARTED
master02.fsdns.com HDFS STARTED
master03.fsdns.com AMBARI_METRICS STARTED
master03.fsdns.com YARN STARTED
master03.fsdns.com HDFS STARTED
.
.
.
.
.
worker09.fsdns.com AMBARI_METRICS STARTED
worker09.fsdns.com YARN STARTED
worker09.fsdns.com HDFS STARTED到现在为止我尝试过的
for i in 01 02 03 04 05 06 07
do
grep worker$i /tmp/list.in
done
worker01.fsdns.com AMBARI_METRICS STARTED
worker01.fsdns.com YARN STARTED
worker01.fsdns.com HDFS STARTED
worker02.fsdns.com AMBARI_METRICS STARTED
worker02.fsdns.com YARN STARTED
worker02.fsdns.com HDFS STARTED
worker03.fsdns.com AMBARI_METRICS STARTED
worker03.fsdns.com YARN STARTED
worker03.fsdns.com HDFS STARTED
worker05.fsdns.com AMBARI_METRICS STARTED
worker05.fsdns.com YARN STARTED
worker05.fsdns.com HDFS STARTED
worker06.fsdns.com AMBARI_METRICS STARTED
worker06.fsdns.com YARN STARTED
worker06.fsdns.com HDFS STARTED
worker07.fsdns.com AMBARI_METRICS STARTED
worker07.fsdns.com YARN STARTED
worker07.fsdns.com HDFS STARTED发布于 2018-01-09 02:15:56
$ sort -k1,1 list.in |
awk '
/^[[:space:]]*$/ { next };
lasthost == "" { lasthost = $1 };
$1 == lasthost { print $0; next };
{print "\n" $0 ; lasthost=$1 }'
master01.fsdns.com AMBARI_METRICS STARTED
master01.fsdns.com HDFS STARTED
master01.fsdns.com YARN STARTED
master02.fsdns.com AMBARI_METRICS STARTED
master02.fsdns.com HDFS STARTED
master02.fsdns.com YARN STARTED
master03.fsdns.com AMBARI_METRICS STARTED
master03.fsdns.com HDFS STARTED
master03.fsdns.com YARN STARTED
worker01.fsdns.com AMBARI_METRICS STARTED
worker01.fsdns.com HDFS STARTED
worker01.fsdns.com YARN STARTED
worker02.fsdns.com AMBARI_METRICS STARTED
worker02.fsdns.com HDFS STARTED
worker02.fsdns.com YARN STARTED
worker03.fsdns.com AMBARI_METRICS STARTED
worker03.fsdns.com HDFS STARTED
worker03.fsdns.com YARN STARTED
worker05.fsdns.com AMBARI_METRICS STARTED
worker05.fsdns.com HDFS STARTED
worker05.fsdns.com YARN STARTED
worker06.fsdns.com AMBARI_METRICS STARTED
worker06.fsdns.com HDFS STARTED
worker06.fsdns.com YARN STARTED
worker07.fsdns.com AMBARI_METRICS STARTED
worker07.fsdns.com HDFS STARTED
worker07.fsdns.com YARN STARTED
worker08.fsdns.com AMBARI_METRICS STARTED
worker08.fsdns.com HDFS STARTED
worker08.fsdns.com YARN STARTED
worker09.fsdns.com AMBARI_METRICS STARTED
worker09.fsdns.com HDFS STARTED
worker09.fsdns.com YARN STARTEDawk脚本跟踪在$1字段中看到的最后一个主机名,并在当前输入行更改时打印换行符。它还跳过完全为空或只包含空白字符的任何行。
为了避免在第一条记录之前打印空行,它还检查lasthost变量是否为空(即未定义),并将其设置为空。
发布于 2018-01-09 00:53:54
这样做是可行的:
awk '$1{a[$1];b[$2]}
END{asorti(a);for( i in a){for(j in b){printf("%s %s\n",a[i],j)};printf("\n")}}' file$1对于第一个字段,而不是空的{a[$1];b[$2]},创建数组a和b,在asorti(a)中读取所有文件之后,对数组进行排序,对每个服务器的for( i in a ){进行排序,为每台服务器printf("%s %s\n",a[i],j)};打印已排序的值,为输入文件打印一个新的(空)行}' file。
发布于 2018-01-09 02:41:35
使用了Awk和sed来实现同样的功能。经过测试,效果很好。
i=`awk -F "." '{print $1}' l.txt | sed '/^$/d' | sed "s/\s+//g" | sort -u`; for j in $i; do sed -n "/$j/p" l.txt; done输出
master01.fsdns.comAMBARI_METRICS STARTED
master01.fsdns.com YARN STARTED
master01.fsdns.com HDFS STARTED
master02.fsdns.com AMBARI_METRICS STARTED
master02.fsdns.com YARN STARTED
master02.fsdns.com HDFS STARTED
master03.fsdns.com AMBARI_METRICS STARTED
master03.fsdns.com YARN STARTED
master03.fsdns.com HDFS STARTED
worker01.fsdns.com AMBARI_METRICS STARTED
worker01.fsdns.com YARN STARTED
worker01.fsdns.com HDFS STARTED
worker02.fsdns.com AMBARI_METRICS STARTED
worker02.fsdns.com YARN STARTED
worker02.fsdns.com HDFS STARTED
worker03.fsdns.com AMBARI_METRICS STARTED
worker03.fsdns.com YARN STARTED
worker03.fsdns.com HDFS STARTED
worker05.fsdns.com AMBARI_METRICS STARTED
worker05.fsdns.com YARN STARTED
worker05.fsdns.com HDFS STARTED
worker06.fsdns.com AMBARI_METRICS STARTED
worker06.fsdns.com YARN STARTED
worker06.fsdns.com HDFS STARTED
worker07.fsdns.com AMBARI_METRICS STARTED
worker07.fsdns.com YARN STARTED
worker07.fsdns.com HDFS STARTED
worker08.fsdns.com AMBARI_METRICS STARTED
worker08.fsdns.com YARN STARTED
worker08.fsdns.com HDFS STARTED
worker09.fsdns.com AMBARI_METRICS STARTED
worker09.fsdns.com YARN STARTED
worker09.fsdns.com HDFS STARTEDhttps://unix.stackexchange.com/questions/415702
复制相似问题