查询文本文档的名称

查询文本文档的名称

打印名为 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

  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

您可以使用grepand cutand (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计算名称(行)的数量

相关内容