Используйте sed или awk для присоединений к строкам в определенном шаблоне?

2> перенаправление не работает с csh или tcsh.

Используйте chsh управляйте для изменения оболочки на/bin/sh или/usr/local/bin/bash для использования 2> перенаправление стиля.Примечание: Не изменяйте оболочку корня на/usr/local/bin/bash

csh и tcsh не могут перенаправить стандарт и ошибку отдельно, но >& перенаправит объединенный вывод в файл.

6
13.06.2013, 02:20
2 ответа

Используя pr от coreutils:

pr -2 -t -l 40 -s' ' $oldfile > $newfile

Добавьте теги с помощью того же pr и sed:

pr -2 -t -l 40 -J -S'</b> <i>' $oldfile | sed 's|^|<il><b>|;s|$|</i></il>|' > $newfile

вывод:

<il><b>A</b> <i>apartner</i></il>
<il><b>B</b> <i>bpartner</i></il>
<il><b>C</b> <i>cpartner</i></il>
8
27.01.2020, 20:23

[GNU]

Если не важно использовать sed или awk затем я рекомендую это как самое легкое решение:

Сначала Вы разделяете файл в два:

head -n 40 file >file1
tail -n 40 file >file2

Затем Вы комбинируете строки:

paste --delimiters=" " file1 file2

Вместо head и tail можно использовать sed или awk, конечно:

sed -n -e 1,40p combinedfile >file1
sed -n -e 41,80p combinedfile >file2
awk 'NR < 41 {print;}' combinedfile >file1
awk 'NR > 40 {print;}' combinedfile >file2

Хорошо, я просто понимаю: чистое awk решение не является столь сложным, как я думал:

awk 'NR < 41 { lines[NR]=$0; next; }; {print lines[NR-40],$0}' combinedfile
5
27.01.2020, 20:23
  • 1
    можно пропустить создание file1 и file2: paste <(head -40 file) <(tail -40 file ) –  Mark McKinstry 13.06.2013, 02:06

Теги

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