2015-06-30 33 views
0

我在我的Unix服務器上有一個.gz文件。我想從該文件中搜索abc123def456這兩個單詞,如果在文件中包含這些單詞,我只想在單獨的文件中只打印這些單詞(只有2個單詞而非整行)。搜索特定單詞並僅在單獨的文件中打印這些單詞

+0

我試着用grep命令,但是它從文件中打印整行,但是我只想要那兩個單詞...不是整個行都有這些單詞 –

+0

我建議你用你用過的命令編輯問題, t返回你想要的結果。有人可以爲你糾正它。 –

+0

你應該真的顯示你嘗試過的命令,解釋他們爲什麼不做你想做的事情。假設文件沒有被壓縮;你會如何從非壓縮文件中獲取你想要的信息?如何在不實際解壓縮文件的情況下查看文件的解壓縮內容?你如何結合這兩個操作?你說'Unix'; Unix的變種?它有'-o'選項有GNU'grep'嗎?如果您之後的文字在文件中出現多次,應該發生什麼情況?單詞在輸出內容中的順序是否出現? –

回答

0

你可以嘗試以下方法:

zcat f.xml.gz | awk '{\ 
{ \ 
if(index($0,str_1)) \ 
    cnt_1=1; \ 
if(index($0,str_2)) \ 
    cnt_2=1; \ 
if((cnt_1 + cnt_2) == 2) {\ 
    print str_1,str_2> "f_out.log"; exit;} \ 
} }' str_1="Keepout" str_2="LatLonList" 

其中

  • 「f.xml.gz」 是輸入文件
  • str_1是第一個字(你的 「ABC123」)
  • str_2是第二個單詞(您的「def456」)
  • 「f_out.log」是單獨的文件,其中如果在輸入文件

希望這會有所幫助。

+0

所有這些反斜槓都是不必要的,除非您不小心使用C shell衍生工具而不是Bourne shell衍生工具作爲主外殼。國際海事組織是海邊的海洋。在Bourne-shell派生中,那些反斜槓會破壞腳本。開頭'{{'和匹配關閉'}}'是奇怪的;雙大括號的優點是什麼,而不是單個大括號?你爲什麼決定使用'Keepout'和'LatLonList'而不是'abc123'和'def456'? –

+0

上面的代碼片段不工作...如果我給str_1世界,那麼它也是印刷世界,甚至世界的詞在我的文件中不存在 –

0

你的問題有一個答案in this SO post

您可以運行此命令來實現你想要

gzcat <filename.zip> | grep -oh "<Search pattern>" * 

爲前

gzcat <filename.zip> | grep -oh "abc123" * 

我沒有安裝zgrep什麼,但你也可以試試這個

zgrep -oh "<Search pattern>" *` filename.zip