我有一个包含我的行的文件,我想比较一个接一个的行来测试它们是否相同,除了最后一列。例如:
example/example 321
example/example 456
otherexample/otherexample 321
在这种情况下,我希望程序只返回:
example/example
由于第一列匹配,但第二列不同。使用Unix工具执行此操作的最佳方法是什么?到目前为止,我已经尝试了 awk ,但收效甚微。非常感谢。
答案 0 :(得分:2)
# sample data
$ cat input.txt
example/example 321
example/example 456
example/example 789
otherexample/otherexample 321
abc
otherexample/otherexample 321
$ awk 'x==$1{print $1; while(getline){if(x!=$1)break}}{x=$1}' input.txt
example/example
答案 1 :(得分:0)
一种方式:
script.awk
的内容:
## In first line, get path and init counter of consecutive paths.
FNR == 1 {
path = $1
repeats = 1
next
}
FNR > 1 {
## If current path is same as previous one, increment counter.
if ( path == $1 ) {
++repeats;
}
## Else, there is new path, so print previous and init counter.
else {
print_repeated_path( repeats, path )
path = $1
repeats = 0
}
}
END {
print_repeated_path( repeats, path )
}
function print_repeated_path(r, path) {
if ( r > 1 ) {
printf "%s\n", path
}
}
infile
的内容:
example/example 321
example/example 456
otherexample/otherexample 321
other/example 456
other/example 678
other/example 123
otherexample/otherexample 321
像以下一样运行:
awk -f script.awk infile
以下结果:
example/example
other/example
答案 2 :(得分:0)
sort -u temp.txt|awk '{a[$1]++}END{for (i in a){if(a[i]>1)print i;}}'
答案 3 :(得分:0)
这可能对您有用:
cut -d' ' -f1 file | sort | uniq -d
或者这个:
sort file | sed '$!N;/^\(\S*\) .*\n\1.*/!D;bb;:a;$!N;:b;s//\1/;ta;P;D'