Найти разные строки между двумя файлами без сортировки

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

#! /bin/sh -
printf 'Type text: '
IFS= read -r userInput
length=$(printf %s "$userInput" | wc -m)
# or:
length=${#userInput}

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

#! /bin/sh -
printf 'Type text: '
IFS= read -r userInput && userInput="$userInput
"
length=$(printf %s "$userInput" | wc -m)
# or:
length=${#userInput}

read обычно возвращает true, если была введена полная строка (присутствует символ новой строки), поэтому мы добавляем ее, если чтение было успешным.

Обратите внимание, что в большинстве реализаций оболочки (за исключением zsh) он не будет работать должным образом, если пользователь введет символ NUL (он же ^@).

Чтобы обойти это, вы можете сделать:

printf 'Type text: '
length=$(line | wc -m)

вместо этого. Или:

length=$(line | tr -d '\n' | wc -m)
# or
length=$(($(line | wc -m) - 1)) # as line always includes a newline on
                                # output even if one was not provided on
                                # input.

, если вы не хотите считать новую строку.

Поведение также изменится, если пользователю удастся ввести байты, которые не являются частью допустимых символов. Вы также найдете некоторые реализации sh, чьи ${#var} не работают должным образом с многобайтовыми символами (будет возвращать длину в байтах вместо символов).

1
31.05.2019, 23:38
2 ответа

Могу ли я вместо grep заменить comm ? Учебники могут быть полезными , но вот одна строчка, чтобы сделать то, что вы хотите:

comm -3 bigfile smallfile > differences
0
28.01.2020, 00:10

Этот лайнер должен помочь, и он заботится о том, чтобы выходной файл не сортировался:

cat -n barcodes1.tsv barcodes.tsv | sort -uk2 | sort -nk1 | cut -f2- > diff.csv

По сути, это:

  • Объединяет файл.
  • Удаляет дубликаты.
  • Вывод в нужный файл, который не будет отсортирован.
1
12.08.2020, 13:57

Теги

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