1. 程式人生 > >shell整理(43)====shell腳本去重

shell整理(43)====shell腳本去重

shell

題目:

有一文檔中有如下內容,寫一個shell腳本實現去重,逆序也算重復。例如a b c 和 c b a

a b c

d e f

a d c d e f

c b

c b a

x y z

x y z

a b

z y x

z x

x y

a d c d

a b c

a b c

a

b

c


思路:打個比方

比如有一個箱子裏面裝著

2 個紅球

2 個綠球

2 個藍球

cc 文件有多少行就循環多少次

第一個循環

現在要去重,這時候我們可以從裏面隨機的拿出一個球到另一個**空的箱子(剛開始是空的);相當於腳本中的flag=`cat file | grep -E "$i|$a"`這行。

當你放入後這裏面已經有一個球了,相當於 echo $i >> file ,並把這個球給展示出來 ,相當於 echo $line

第二次循環

有兩種情況

1 是紅球

2 不是紅球

如果說是紅球,第一次取出一個紅球,這次又取出一個紅球,重復了,直接丟掉,不將它放入另一個箱子。

如果說不是紅球,第一次取出一個紅球,這次取出不是一個紅球,不與箱子中的球重復,把它放入另一個箱子。

[root@localhost shell]# cat cc.sh 
#!/bin/bash

[ ! -f file ]&&touch file
	while read line
	do
	   i=`echo $line|sed ‘s/ //g‘`
	   a=`echo $i|rev`
	   flag=`cat file |awk ‘{if($0=="‘$i‘"||$0=="‘$a‘")print "ok"}‘`
	   if [[ "$flag" != "ok" ]];then
		echo $line
		echo $i >> file
	  fi
	done< cc
rm  file


本文出自 “IT生活” 博客,請務必保留此出處http://dingxue.blog.51cto.com/12290895/1977696

shell整理(43)====shell腳本去重