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
。
mur.txtというファイルに男性名を含む行を印刷します。
awk -F: '$2~/M/' file > muser.txt
イタリアから来たすべての男の名前を書いてください。
awk -F: '$2=="M" && $3~/Italy$/{print $1}' file
イタリア出身のすべての男性に異なる名前の数を出力します。
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
grep
andcut
と(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
名前(行)数の計算