我有一个文本文件,其中每一行都是一组以逗号分隔的单词。我需要知道一个单词是否重复,如果是,重复的是哪一行。例如:
word1, word2, word3, word4, word5
word6, word4, word7, word8
输出:
word4: 1,2
我正在尝试使用perl脚本,它会逐行读取文件,从而创建从单词到行号的映射,但我想知道是否有更简单的方法。
答案 0 :(得分:3)
你需要阅读所有的行才能打印任何内容,所以你所描述的是你必须要做的事情,但事实证明这很简单。
my %seen;
while (<>) {
for (split /\s*,\s*/) {
push @{ $seen{$_} }, $.;
}
}
for my $word (keys(%seen)) {
next if @{ $seen{$word} } < 2;
print($word . ": " . join(",", @{ $seen{$word} }) . "\n");
}
答案 1 :(得分:2)
使用Perl one-liner:
perl -F/,\s*/ -lanE 'push @{$w{$_}}, $. for @F; }{ say "$_: @{$w{$_}}" for grep {@{$w{$_}} > 1} sort keys %w' words.txt
切换:
-F
: - a开关的split()模式(//&#39; s是可选的)-l
:启用行结束处理-a
:拆分空间线并将其加载到数组@F
-n
:为输入文件中的每个“行”创建一个while(<>){...}
循环。 -e
:告诉perl
在命令行上执行代码。 (-E
启用所有可选功能)