有如下文本,其中前5行内容为
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123
用shell脚本处理后,按下面格式输出:
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123
#!/bin/bash sort -n 1.txt |awk -F ':' '{print $1}'|uniq >id.txt for id in `cat id.txt` do echo "[$id]" awk -F ':' '$1=="'$id'" { print $2}' 1.txt done
解析:
sort -n 使用纯数字排序
awk -F ':' '{print $1}' 以“:”冒号为分隔符,打印第一字域(第一部分)
uniq 去重复的行
>id.txt 输出重定向到id.txt文本中
awk -F ':' '$1=="'$id'" { print $2}' 1.txt :以“:”冒号分隔,如果第一域的值等于$id的值,打印第二域。
扩展:
文件内容如下:
2016-12-08 00:09 血战钢锯岭 2016-12-08 03:01 你的名字 2016-12-08 04:00 长城 2016-12-08 04:01 萨利机长 2016-12-09 07:35 神奇动物在 2016-12-09 09:24 湄公河行动 2016-12-09 10:59 我不是潘金莲 2016-12-09 12:43 海洋奇缘 2016-12-09 14:29 神奇四侠2015 2016-12-10 16:30 死侍 2016-12-10 16:31 加勒比海盗5:死 2016-12-10 16:36 三体 2016-12-10 18:04 阿凡达2 2016-12-10 19:40 日落七次 |
[2016-12-08] 00:09 血战钢锯岭 03:01 你的名字 04:00 长城 04:01 萨利机长 [2016-12-09] 07:35 神奇动物在 09:24 湄公河行动 10:59 我不是潘金莲 12:43 海洋奇缘 14:29 神奇四侠2015 [2016-12-10] 16:30 死侍 16:31 加勒比海盗5:死 16:36 三体 18:04 阿凡达2 19:40 日落七次 |
答案:
#!/bin/bash awk -F ' ' '{print $1}' 2.txt|uniq >21.txt for id in `cat 21.txt` do echo "[$id]" awk '$1=="'$id'" {print $2" "$3"\n"}' 2.txt echo done
纯属个人见解,不正之处请指出
转载于:https://blog.51cto.com/12129628/2072120