shell:處理文本

有以下文本,其中前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


純屬我的看法,不正之處請指出

相關文章
相關標籤/搜索