Как повторить слово или строку

Конвейер вашего входного файла в следующий должен сделать это:

cut -f1 -d, | sort | uniq -cd

Вывод отличается от того, что вы опубликовали; количество дубликатов - это первый столбец, а не последний и заключенный в скобки:

  2 110110
  2 112112112

Вызов cutзапрашивает выделение первого поля, разделенного запятой -, sortгарантирует, что одинаковые поля будут следовать друг за другом, что требуется для uniqдля их группировки; -cзапрашивает подсчет, а -dпоказывает только дубликаты. Сортировка всего ввода может быть не самым эффективным способом достижения того, что вы просите, но это должно быть проблемой, только если ваш ввод становится очень большим.

0
08.01.2020, 07:30
2 ответа

Для этого вам не нужны никакие внешние утилиты, а просто используйте внутреннюю часть вашей собственной оболочки с printf()функциональностью. Например,. в оболочке bashвы можете сделать

foo() {
    if [ "$1" -lt 2 ]; then
        printf '%s\n' 'insufficient arguments provided' >&2
    fi

    local iter
    for (( iter = 1; iter <= $1; iter++ )); do
        printf '%s\n' "$2"
    done
}

Убедитесь, что слово, которое будет напечатано, заключено в кавычки, чтобы слова не разделялись. Например.

foo 3 bar
foo 3 'howdy world'

Если вы ищете внешнюю утилиту для того же самого, perlили awkмогут просто сделать это по мере необходимости

printf '%s\n' 'howdy world' | perl -ne 'print $_ x 3' 

или

printf '%s\n' 'howdy world' | awk '{ for (i = 1; i <= 3; i++) print $0 }'

Также в системах BSD есть двоичный файл jot, который может просто повторять предоставленные ему строки. Или в системах Ubuntu в пакете athena-jot.

jot -b 'howdy world' 3 
2
28.01.2020, 02:21

tcshи zshимеютrepeat:

repeat 3 echo word

С помощью printfможно сделать:

printf 'word\n%.0s' {1..3}
1
28.01.2020, 02:21

Теги

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