我可以在python中执行此操作,但我想知道我是否可以在Linux中执行此操作
我有一个像这样的文件
name1 text text 123432re text
name2 text text 12344qp text
name3 text text 134234ts text
我希望通过特定的用户名在第3列中找到所有不同类型的值,例如名称1。
grep name1 filename给了我所有的行,但必须有一些方法来列出所有不同类型的值? (我不想显示相同用户名的重复值)
答案 0 :(得分:37)
grep name1 filename | cut -d ' ' -f 4 | sort -u
这将找到所有具有name1的行,然后只获取第四列数据并仅显示唯一值。
答案 1 :(得分:8)
您可以只对第4个键进行排序,然后仅询问具有唯一键的记录:
grep name1 | sort -k4 -u
答案 2 :(得分:6)
我尝试使用 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
答案 3 :(得分:1)
作为一体化的awk解决方案:
awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename
答案 4 :(得分:1)
IMHOMichałŠrajer获得了最佳答案,但在 grep name1 之后需要一个文件名 我已经有了使用索引数组的精美解决方案
user=name1
IFSOLD=$IFS; IFS=$'\n'; test=( $(grep $user test) ); IFS=$IFSOLD
declare -A index
for item in "${test[@]}"; {
sub=( $item )
name=${sub[3]}
index[$name]=$item
}
for item in "${index[@]}"; { echo $item; }
答案 5 :(得分:0)
在我看来,您需要选择需要唯一值的字段。我试图从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
因此,最好的办法是首先选择字段,然后过滤掉唯一数据。
答案 6 :(得分:0)
以下命令对我有用。
sudo cat AirtelFeb.txt | awk '{print $3}' | sort -u
此处将打印具有唯一值的第三列。
答案 7 :(得分:0)
我认为您的意思是第四栏。 您可以尝试使用'cat Filename.txt | awk'{print $ 4}'|排序uniq'