我有一个以下格式的文件:
ABRA CADABRA
ABRA CADABRA
boys
girls
meds toys
我想要返回任何重复行的行号,因此结果如下所示:
1
2
我更喜欢使用linux工具进行简短的单行命令。我尝试过使用awk和sed但是还没有成功。
答案 0 :(得分:0)
使用sort,uniq和awk的组合,您可以使用这一系列命令。
sort File_Name | uniq -c | awk '{print $2}'
答案 1 :(得分:0)
这样可行:
nl file.txt | uniq -f 1 -D | cut -f 1
答案 2 :(得分:0)
下面:
uniq -d < $file | while read line; do grep -hn "$line" $file; done
答案 3 :(得分:0)
这样做:
perl -e 'my $l = 0; while (<STDIN>) { chomp; $l++; if (exists $f{$_}) { if ($f{$_}->[0]++ == 1) { print "$f{$_}->[1]\n"; print "$l\n"; } } else { $f{$_} = [1,$l]; } }' < FILE
丑陋,但适用于未分类的文件。
$ cat in.txt
ABRA CADABRA
ABRA CADABRA
boys
girls
meds toys
girls
$ perl -e 'my $l = 0; while (<STDIN>) { chomp; $l++; if (exists $f{$_}) { if ($f{$_}->[0]++ == 1) { print "$f{$_}->[1]\n"; print "$l\n"; } } else { $f{$_} = [1,$l]; } }' < in.txt
1
2
4
6
$
编辑:实际上它会略微缩短:
perl -ne '$l++; if (exists $f{$_}) { if ($f{$_}->[0]++ == 1) { print "$f{$_}->[1]\n"; print "$l\n"; } } else { $f{$_} = [1,$l]; }' < in.txt
答案 4 :(得分:0)
让所有&#34;不同&#34;您可以尝试在所有行中重复:
nl input.txt | sort -k 2 | uniq -D -f 1 | sort -n
这不会只给出行号,而是在这些行中找到的副本。省略最后一种排序,将重复项组合在一起。
也尝试跑步:
nl input.txt | sort -k 2 | uniq --all-repeated=separate -f 1
这将通过在重复组之间添加空行来对各种重复项进行分组。
管道结果
| cut -f 1 | sed 's/ \+//g'
仅获取行号。
答案 5 :(得分:0)
<?php ?>