我可以在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
所以,最好的办法是先选择字段,然后过滤出唯一的数据。