Как удалить дублирующиеся слова из файла простого текста с помощью команды Linux

в jquery вы можете использовать:

$(document).ready(function(){/*do stuff here*/});

, который гарантирует, что javascript загружен и dom готов, прежде чем делать ваши вещи.

в прототипе похоже, что это может сработать

document.observe("dom:loaded", function() {/*do stuff here*/});

Если я правильно понимаю вашу проблему ... Я думаю, что это может помочь ..

Если вы не хотите полагаться на библиотеку, чтобы сделать это ... Я думаю, что это может сработать:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>
21
задан cupakob 4 June 2009 в 18:24
поделиться

7 ответов

Предполагается, что слова по одному в строке, а файл уже отсортирован:

uniq filename

Если файл не отсортирован:

sort filename | uniq

Если их нет в каждой строке, и вы не используете не возражайте, чтобы они были по одному в строке:

tr -s [:space:] \\n < filename | sort | uniq

Это не удаляет знаки препинания, так что, возможно, вы захотите:

tr -s [:space:][:punct:] \\n < filename | sort | uniq

Но это удалит дефис из слов, написанных через дефис. "man tr" для дополнительных опций.

32
ответ дан 29 November 2019 в 20:25
поделиться

ruby ​​-pi.bak -e '$ _. Split (","). Uniq.join (",")' filename ?

Я признаю два вида цитат некрасивы.

3
ответ дан 29 November 2019 в 20:25
поделиться

Создание уникального списка довольно просто благодаря uniq , хотя большинство Команды Unix, такие как одна запись в строке вместо списка, разделенного запятыми, поэтому мы должны начать с преобразования его в это:

$ sed 's/, /\n/g' filename | sort | uniq
word1
word2
word3
word4
word5
word6
word7

Более сложная часть - снова поместить это в одну строку с запятыми в качестве разделителей, а не терминаторов. Для этого я использовал однострочник Perl, но если у кого-то есть что-то более идиоматическое, отредактируйте меня. :)

$ sed 's/, /\n/g' filename | sort | uniq | perl -e '@a = <>; chomp @a; print((join ", ", @a), "\n")'
word1, word2, word3, word4, word5, word6, word7
2
ответ дан 29 November 2019 в 20:25
поделиться

Вот сценарий awk, который оставит каждую строку без изменений, удаляя только повторяющиеся слова:

BEGIN { 
     FS=", " 
} 
{ 
    for (i=1; i <= NF; i++) 
        used[$i] = 1
    for (x in used)
        printf "%s, ",x
    printf "\n"
    split("", used)
} 
2
ответ дан 29 November 2019 в 20:25
поделиться

Я думаю, вы захотите заменить пробелы на новые строки, использовать команду uniq , чтобы найти уникальные строки, а затем снова заменить новые строки пробелами.

1
ответ дан 29 November 2019 в 20:25
поделиться

Я предположил, что вы хотели, чтобы слова были уникальными в одной строке, а не во всем файле. Если это так, то сценарий Perl, приведенный ниже, поможет.

while (<DATA>)
{
    chomp;
    my %seen = ();
    my @words = split(m!,\s*!);
    @words = grep { $seen{$_} ? 0 : ($seen{$_} = 1) } @words;
    print join(", ", @words), "\n";
}

__DATA__
word1, word2, word3, word2, word4, word5, word3, word6, word7, word3

Если вам нужна уникальность для всего файла, вы можете просто переместить хэш % visible за пределы while () {} петля.

1
ответ дан 29 November 2019 в 20:25
поделиться

И не забывайте параметр -c для утилиты uniq , если вы хотите подсчитать слова тоже.

0
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: