Как добавить конец каждой строки с самой строкой

если Вы находитесь в каталоге:

cd .. && rm -rf dir && mkdir dir && cd dir

иначе:

rm -rf /path/to/dir && mkdir /path/to/dir

6
10.05.2011, 20:13
4 ответа

Вот простое решение с помощью вставки:

paste -d ' ' file.txt file.txt
12
27.01.2020, 20:20
  • 1
    Interesitng и удивление!... Удивление, потому что это особенно быстрее, чем sed -e "s/\(.*\)/\1 \1/" и sed -e "s/.*/& &/" для чего-либо кроме самых маленьких файлов.. Я сделал тесты некоторого времени, и хотя взятия приблизительно то же время для файла с 1 строкой, paste становится относительно намного быстрее как количество увеличений строк.. upt к целых в 28 раз быстрее с 1 000 000 строк... Вот lin к тестовому отрывку: paste.ubuntu.com/606010 –  Peter.O 11.05.2011, 08:42
  • 2
    @fred Это не так удивительно. Специализированный инструмент такой как paste имеет оптимизированный код для его конкретной задачи, в отличие от этого sed или awk которые являются интерпретаторами. Штраф, который Вы платите, - то, что специализированный инструмент может только сделать одно задание. –  Gilles 'SO- stop being evil' 11.05.2011, 10:16

Существует больше чем Один способ сделать это:

Замените два раза полным предложением:

sed 's/.*/& &/'

Копия для содержания пространства добавьте, содержат пространство, чтобы скопировать пространство, зафиксировать новую строку:

sed 'h;G;s/\n/ /'

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

awk '$0=$0FS$0'
7
27.01.2020, 20:20
  • 1
    я сделал тесты некоторого времени: paste.ubuntu.com/606010... Для больших файлов, sed -e "h;G;s/\n/ /" незначительно быстрее, чем sed -e "s/.*/& &/", который незначительно быстрее, чем awk '$0=$0FS$0', но они все приблизительно в 10 раз медленнее, чем paste -d ' ' file file (как предложено Hai Vu .. Я вполне удивлен, но это - то, что времена показывают... –  Peter.O 11.05.2011, 09:34

Попытка:

sed 's/\(.*\)/\1 \1/' data.txt
11
27.01.2020, 20:20
  • 1
    можно также использовать \0 соответствовать всему выражению, таким образом, s/.*/\0 \0/ –  Michael Mrozek♦ 10.05.2011, 20:20
  • 2
    или & (также вся подобранная часть) –  ninjalj 10.05.2011, 21:40
  • 3
    @Michael: Вы можете? О, это - расширение GNU. Не в POSIX или OpenBSD. Довольно бессмысленное расширение с тех пор существует &. –  Gilles 'SO- stop being evil' 11.05.2011, 00:55
  • 4
    .. Для больших размеров файла, этого \1 \1 метод до 30 раз медленнее, чем Hai Vu paste метод.. и это также медленнее, чем & &... Вот ссылка на мой сценарий тестирования: paste.ubuntu.com/606010 –  Peter.O 11.05.2011, 08:38

Я сделал бы это в жемчуге, но так как Вы помещаете awk, я дам Вам код awk

awk '{print $0,$0;}' file.txt

Править: удалите мою бесполезную кошку

4
27.01.2020, 20:20

Теги

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