有以下文本,其中前5行內容爲shell
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123bash
用shell腳本處理後,按下面格式輸出:ide
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123spa
#!/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 使用純數字排序it
awk -F ':' '{print $1}' 以「:」冒號爲分隔符,打印第一字域(第一部分)table
uniq 去重複的行class
>id.txt 輸出重定向到id.txt文本中awk
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
純屬我的看法,不正之處請指出