Как вы распечатываете повторяющиеся строки в соответствии с моими задачами ниже?

Вы можете сделать это без замены процесса и без смешивания fd 1 и 3 или fd 1 и 2:

producer(){ echo to_out; echo >&2 to_err; echo >&3 to_fd3; }
consumer(){ sed "s/^/consumer $@: /" >/dev/tty; }

{ producer 3>&1 >&4 | consumer 3; } 4>&1 | consumer 1
to_err
consumer 1: to_out
consumer 3: to_fd3

{ producer 3>&1 >&4 | consumer 3; } 4>&1
to_out
to_err
consumer 3: to_fd3
-6
09.10.2021, 22:00
1 ответ

Это выглядит как учебник для начинающих, так что вы вероятно, ожидали, что знаете некоторые утилиты, которые являются общими помощниками оболочки (, например, я вижу процитированную wcутилита ).

Если это так, то вопрос #2 просто спрашивает вас, помните ли вы, что делает утилита оболочки uniq; потому что ответ таков: "направить вывод на uniq -d" .

$ echo -e "one\ntwo\ntwo\nthree" # Echo four lines, one is repeated
one
two
two
three
$ echo -e "one\ntwo\ntwo\nthree" | uniq -d    # Filter the four
two

UPDATE:для вывода строк, которые повторяют даже не по порядку , вам просто нужно отсортировать эти строки так, чтобы повторяющиеся строки были смежными и могли быть распознаны uniq -d. Вы делаете это, используя sortпередuniq:"... | sort | uniq -d".

«Соединение stdout A с stdin B» выполняется с помощью символа вертикальной черты (, аналогичного знакомому вам > символу):A | B. Это то, что происходит выше, когда стандартный вывод echoпередается в стандартный вывод uniq -d.

При всем при этом вы должны были сами ответить на эти вопросы. Тот факт, что вы этого не сделали, должен сказать вам, что вам нужно вернуться и просмотреть уроки, заметки, учебник или что-то еще, что было до этих вопросов; если вы пропустили использование символа трубы, кто знает, что еще вы могли пропустить?-и в этом, собственно, и состоит цель этих глупых вопросов :дать вам понять, когда вам нужно укрепить свои основы.

3
10.10.2021, 00:42

Теги

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