亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 文件內(nèi)容多字符串搜索 [打印本頁]

作者: 夏洛特貓    時間: 2016-06-01 11:09
標(biāo)題: 文件內(nèi)容多字符串搜索
本帖最后由 夏洛特貓 于 2016-06-01 11:36 編輯

在文件處理的時候,一直在用grep做過濾來過濾關(guān)鍵詞,
需要對文件查看是否含有多個關(guān)鍵詞的時候發(fā)現(xiàn)grep不是特別好用,grep對每行的內(nèi)容進(jìn)行搜索還可以,但是不知道哪種更適合如下的要求,先謝謝大家的幫助

題目如下:     
          需要精確的檢測L文件內(nèi)容,如果文件中同時含有"hello","name","old","floatdir"這四個詞則輸出正確,如果缺省其中的任何一個都需要輸出錯誤。


文件L的內(nèi)容如下:

L1:
hello
name
old
floatdir

L2:
hello
name
old

我的思路是通過循環(huán)對文件一次查找,如果不為空則說明所有單詞都在文件中,但是不知道又沒用更簡單的 甚至是用一條命令就可以完成滿足上述條件的操作,先謝謝各位前輩了。



作者: moperyblue    時間: 2016-06-01 11:32
本帖最后由 moperyblue 于 2016-06-01 11:44 編輯
  1. more L
  2. aa
  3. hello
  4. name
  5. old,floatdir
  6. bb

  7. grep -oP 'hello|name|old|floatdir' L|wc -l
  8. 4

  9. more L
  10. aa
  11. iello
  12. name
  13. old,floatdir
  14. bb

  15. grep -oP 'hello|name|old|floatdir' L|wc -l
  16. 3
復(fù)制代碼

作者: wjemail    時間: 2016-06-01 11:40
grep "hello" filename && grep "name" filename && grep "old" filename && grep "floatdir" finename && echo "OK"
作者: Herowinter    時間: 2016-06-01 11:45
回復(fù) 1# 夏洛特貓
  1. a=("hello" "name" "old" "floatdir");for((i=0;i<${#a[@]};i++));do if ! grep -wq ${a[i]} i;then echo "incorrect";break;elif(($i==${#a[@]}-1));then echo "correct";fi;done
  2. correct
復(fù)制代碼

作者: sunzhiguolu    時間: 2016-06-01 12:15
本帖最后由 sunzhiguolu 于 2016-06-01 12:17 編輯
  1. perl -00 -nle 'BEGIN{%H=("hello"=>1,"name"=>1,"old"=>1,"floatdir"=>1)}{print "FAIL:\n$_" if((grep {$H{$_}} grep {!/\AL/} split)%4)}' f
復(fù)制代碼
FAIL:
L2:
hello
name
old

作者: jason680    時間: 2016-06-01 12:33
回復(fù) 1# 夏洛特貓

$ awk -vRS='' 'BEGIN{t=split("hello name old floatdir",a)}{c=0;for(n in a)if($0~a[n])++c;print (c==t)?$1"OK":$1"Err"}' L
L1:OK
L2:Err

   
作者: haooooaaa    時間: 2016-06-01 12:38
  1. awk -vRS='hello|name|old|floatdir' 'RT{a[RT]}END{print length(a)==4?"OK":"ERROR"}'
復(fù)制代碼

作者: 夏洛特貓    時間: 2016-06-01 13:57
感謝感謝 perl的都出來了多謝指點回復(fù) 5# sunzhiguolu


   

作者: 夏洛特貓    時間: 2016-06-01 13:59
謝謝您的回復(fù),只是寫判斷不太符合要求,不過看了下您的思路也挺好的,通過判斷行號的變化來確定是否有含有要求的字符 謝謝回復(fù) 2# moperyblue


   

作者: 夏洛特貓    時間: 2016-06-01 14:01
thanks~ 謝謝您的指點,回復(fù) 3# wjemail


   
作者: 夏洛特貓    時間: 2016-06-01 14:04
多謝您的指導(dǎo)!!thanks~回復(fù) 4# Herowinter


   
作者: 夏洛特貓    時間: 2016-06-01 14:11
多謝jason哥 回復(fù) 6# jason680


   
作者: 夏洛特貓    時間: 2016-06-01 14:13
試了下您給的命令,不知道為什么會出現(xiàn)“awk: line 1: illegal reference to array a
” 仍然感謝您的指點回復(fù) 7# haooooaaa


   

作者: sunzhiguolu    時間: 2016-06-01 14:17
  1. perl -00 -ple '@a=/\A\S+|hello|name|old|floatdir/g;@a==5?($_="$a[0]\tGood"):($_="$a[0]\tNo Good")' f
復(fù)制代碼
L1:    Good

L2:     No Good

作者: 夏洛特貓    時間: 2016-06-01 14:21
回復(fù) 14# sunzhiguolu


   
作者: mswsg    時間: 2016-06-02 08:41
如果按照你的示例文件來說,這個判斷不難。不知道你的文件大不大?
作者: jcdiy0601    時間: 2016-06-02 09:08
awk 'BEGIN{RS=""}{if($0~/floatdir/ && $0~/name/ && $0~/hello/ && $0~/old/)print $1"True";else print $1"False"}' file
L1:True
L2:False

作者: 夏洛特貓    時間: 2016-06-02 09:13
并不大,判斷的話也會寫,只是現(xiàn)在想嘗試用一條命令實現(xiàn),多謝您的回復(fù)回復(fù) 16# mswsg


   

作者: 夏洛特貓    時間: 2016-06-02 09:14
thanks alot ~~回復(fù) 17# jcdiy0601


   
作者: ll104567    時間: 2016-06-06 15:23
本帖最后由 ll104567 于 2016-06-06 16:57 編輯

grep -Eo 'hello|name|old|floatdir'|sort|uniq|wc -l
然后看一下是不是4個
改進(jìn)了一下
  1. grep -oE '\bhello\b|\bname\b|\bold\b|\bfloatdir\b'|sort|uniq |wc -l
復(fù)制代碼

作者: 夏洛特貓    時間: 2016-06-06 16:59
謝謝~回復(fù) 20# ll104567


   




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2