打印名为 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
等等。默认字段分隔符是空格,但您可以使用 进行更改-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
and cut
and (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
计算名称(行)的数量