按组的字母顺序排序文本文件(Linux)

时间:2017-08-19 17:59:38

标签: linux shell file sorting grouping

我知道如何按字母顺序对文本文件进行排序,但我尝试的不仅仅是排序(即分组)。

我正在尝试创建一个Unix Shell脚本,该脚本以下列格式格式化组织中的/ etc / hosts文件:

From: 
Xsb ip 
aabc ip 
A2bc ip 
Eexg ip 
exx ip 
Fxg ip


To:

### A 
aabc ip 
a2bc ip 
### E 
eexg ip 
exx ip
### F 
fxg ip
### X
xsb ip

然后我将创建另一个脚本来添加新的主机名行但是现在我不确定最简洁的方法是什么。我想也许我需要用for循环遍历主机名的所有首字母,但是你的专家建议在最短的路上受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

以下脚本可能会满足您的需求。

tr A-Z a-z | sort | awk '{\
  if (last != substr($0, 0, 1)) {\
    print "### "toupper(substr($0,0,1))"\n"$0; last = substr($1, 0, 1)\
  } else {\
    print $0\
  }\
}'
  • tr将字母转换为小写
  • sort按字母顺序排序文字
  • awk当第一行字母与下一行不同时添加'###'

希望这可以帮到你。