2013-07-11 17 views
-1

我想具體的名稱來打印滿足三個條件的城市:capitalcleanbig發現UNIX

輸入:

London is a big city 
London is a capital 
London is a clean city 
Ohio is a big city 
Sydney is a big city 
Sydney is a clean city 
Canberra is a capital 
Canberra is a big city 
Canberra is a clean city 
NewYork is a big city 
NewYork is a clean city 

輸出:

London 
Canberra 

我只需要那些滿足所有3個條件的名字:資本,乾淨又大。

我試圖cut在單獨的文件中的第一列,然後爲每個城市做grep name file|wc -l,只需要那些具有數超過3個。這怎麼能在Unix的使用sedawk來完成。

+3

請告訴我們你已經嘗試的代碼。 – mishik

+0

你有什麼我想是...... 切單獨的文件中的第一列 然後爲每個城市做 grep的名稱文件|廁所-l 並採取只有那些擁有數超過3 – user2571235

+1

歡迎堆棧溢出。請儘快閱讀[關於]頁面。人們會幫助你解決你的代碼問題;人們不會爲你編寫代碼。請編輯你到目前爲止已經嘗試過的問題。請注意,在第一列上運行'cut'會拋棄有關哪種類型的城市的信息。 –

回答

1

只是爲了好玩。

外殼黑客的解決方案:

sort -u input.txt | cut -d' ' -f1 | uniq -dc | egrep '^\s+3\s' 

Perl的黑客的解決方案:

#!/usr/bin/perl 
use strict; 
use warnings; 
use constant { 
    CAPITAL => 1, 
    CLEAN => 2, 
    BIG  => 4, 
}; 
my %table; 

while(<>) 
{ 
    print STDERR "Unparsed: $_" unless m/^(\w+)\s+is a\s+((big city)|(clean city)|(capital))\s*$/gio; 

    $table{$1} |= defined($3) * BIG + 
        defined($4) * CLEAN + 
        defined($5) * CAPITAL; 
} 

while (my ($k,$v) = each %table) 
{ 
    print "$k\n" if (CAPITAL+CLEAN+BIG) == $v; 
}