我有一个包含许多行的文件,如下所示。
第一列将是IP,并且IP可以是重复的。其他列不必排序。如果第一列只是一个数字;排序-u k1,1";。但是,在这种情况下,IP有4个数字。你能帮助按IP的顺序对行进行排序,并删除重复的行,只列出具有唯一IP的行吗?
提前谢谢!
假设包含数据的文件名为data.txt,您可以执行:
awk '{print $1}' data.txt | sort | uniq
awk
只保留第一列,即IP地址sort
:对IP进行排序uniq
:删除重复项
如果需要知道每个IP在文件中出现的次数,可以将选项-c
添加到uniq
中。
这应该可以单独对每列进行排序,并使用数字顺序:
awk '{print $1}' file.txt | sort -ut . -k1,1n -k2,2n -k 3,3n -k 4,4n
假设你想做的是根据IP地址进行排序,同时只根据IP地址删除重复的行,下面的排序和遍历排序文件以删除重复的代码应该有效:
#!/bin/bash
originalFile=/path/to/original/file
outputFile=/path/to/intermediate/file
cleanFile=/path/to/final/file
sort $originalFile > $outputFile
lastIP=""
while read -r line; do
words=("${line// / }")
if [ "${words[0]}" != "$lastIP" ]
then
printf "%sn" "$line" >> $cleanFile
fi
lastIP="${words[0]}"
done < $outputFile