テキスト文書名の問合せ

テキスト文書名の問合せ

mur.txtというファイルに男性名を含む行を印刷します。

イタリアから来たすべての男の名前を書いてください。

イタリアの全員の異なる名前の数を出力します。

文書の前:

Linda:F:Las Vegas, USA:18:telnet
Steve:M:Leipzig, Germany:33:ftp
Henry:M:Milan, Italy:19:sftp
Alice:F:Izmir, Turkey:32:pop3s
Robert:M:Verona, Italy:21:scp
Olga:F:Gorontalo, Indonesia:19:pop3s
Kimberly:F:Lille, France:25:ping
Henry:M:Oslo, Norway:26:ftp
Carol:F:New Delhi, India:23:pop3s
Thomas:M:New Delhi, India:32:http

答え1

これがまさにawkデザインの目的です。選択した区切り文字に従って各行をフィールドに分割します。その後、最初のフィールド$1、2番目のフィールド$2などを呼び出すことができます。デフォルトのフィールド区切り文字はスペースですが、を使用して変更できます-F

  1. mur.txtというファイルに男性名を含む行を印刷します。

    awk -F: '$2~/M/' file > muser.txt
    
  2. イタリアから来たすべての男の名前を書いてください。

    awk -F: '$2=="M" && $3~/Italy$/{print $1}' file 
    
  3. イタリア出身のすべての男性に異なる名前の数を出力します。

    awk -F: '$2=="M" && $3~/Italy$/{print $1}' file | sort -u | wc -l
    

    または

    awk -F: '$2=="M" && $3~/Italy$/{!n[$1]++}END{print length(n)}' file 
    

答え2

grepandcutと(awk冗長ユーザーの場合)を使用してこれを実行できます。

mur.txtというファイルに男性名を含む行を印刷します。

grep :M: YourFile > muser.txt

イタリアから来たすべての男の名前を書いてください。

grep :M: YourFile | grep Italy: |cut -d: -f 1

イタリアの全員の異なる名前の数を出力します。

grep :M: YourFile | grep Italy: |cut -d: -f 1| awk '!x[$0]++' | wc -l

awk '!x[$0]++'重複した名前を削除するために使用されます。
wc -l名前(行)数の計算

関連情報