在数据文件中find唯一的值

我可以在Python中做到这一点,但我想知道如果我可以在Linux中做到这一点

我有这样的文件

name1 text text 123432re text name2 text text 12344qp text name3 text text 134234ts text 

我想通过一个特定的用户名在第三列find所有不同types的值,可以说名字1。

grep name1文件名给我所有的行,但是必须有一些方法来列出所有不同types的值? (我不想为相同的用户名显示重复的值)

 grep name1 filename | cut -d ' ' -f 4 | sort -u 

这将找到所有具有name1的行,然后获取第四列数据,并只显示唯一值。

你只能看看只有4键,然后只要求具有唯一键的记录:

 grep name1 | sort -k4 -u 

我试着用cat

文件包含:(这里的文件是foo.sh,你可以在这里输入任何文件名)

$cat foo.sh

 tar world class zip zip zip python jin jin doo doo 

uniq只会得到每个单词一次

$ cat foo.sh | sort | uniq

 class doo jin python tar world zip 

uniq -u会得到文件中只出现一次的单词

$ cat foo.sh | sort | uniq -u

 class python tar world 

uniq -d会得到唯一的重复单词,并打印一次

$ cat foo.sh | sort | uniq -d

 doo jin zip 

作为一个一体化的awk解决方案:

 awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename 

在我看来,你需要选择你需要唯一值的字段。 我试图从IPTables日志中检索唯一的源IP。

 cat /var/log/iptables.log | grep "May 5" | awk '{print $11}' | sort -u 

以下是上述命令的输出:

 SRC=192.168.10.225 SRC=192.168.10.29 SRC=192.168.20.125 SRC=192.168.20.147 SRC=192.168.20.155 SRC=192.168.20.183 SRC=192.168.20.194 

所以,最好的办法是先选择字段,然后过滤出唯一的数据。