Один из:
tmux new -d \; send ls Enter
tmux new -d \; setw remain-on-exit on \; respawnw -k ls
tmux new -d 'ls; sleep 1000000'
Конечно, если ваша программа не завершается сама по себе (скажите top вместо ls ), вы можете просто:
tmux new -d top
Использованиеawk
:
$ awk 'seen[$0]++; seen[$0] == 2' file
Happy sad
Happy sad
Happy sad
Happy sad
Happy sad
Mad happy
Mad happy
При этом текст каждой строки используется в качестве ключа в ассоциативный массив seen
. Первое seen[$0]++
вызовет печать строки, которая была видна ранее, поскольку значение, связанное с этой строкой, будет не равно -нулю во второй и последующие разы. seen[$0] == 2
вызывает повторную печать строки, если это второй раз, когда строка видна (без этого, вы пропустите одно вхождение каждой дублированной строки ).
Это связано с awk '!seen[$0]++'
, который иногда используется для удаления дубликатов без сортировки (, см., например,. Как работает awk '!a[$0]++'?).
Чтобы получить только одну копию дублированных строк:
awk 'seen[$0]++ == 1' file
или,
sort file | uniq -d
Изman uniq
:
-D print all duplicate lines
Так можно достичь своей цели:
uniq -D file.txt
Если дубликаты не могут быть смежными, и вам нужно сохранить порядок во входных данных, вы можете сделать это с помощью awk
и двух проходов, один для подсчета количества вхождений и один для печати строк, которые были просмотрены. повторяться более одного раза за первый проход:
awk 'second_pass {if (c[$0] > 1) print; next}
{c[$0]++}' file.txt second_pass=1 file.txt
это, вероятно, -решение только для Linux, так как оно использует опцию uniq
's -u
. Вы можете обойти это, используя uniq -c
, затем отфильтровав ^ *1
и т. д., если вы используете какой-то другой вариант.
sort < in | uniq --unique | grep --invert-match --line-regexp --fixed-strings --file - in
Выйдут первые 2 этапа
Mad sad
Sad happy
и на следующем этапе будут удалены строки, точно совпадающие с этими строками. Я выбрал более длинные варианты для ясности; Я сам редко ими пользуюсь Краткая форма будетsort < in | uniq -u | grep -v -x -F -f - in