2010-01-07 8 views
0

Как объединить две отдельные смежные строки в большом текстовом файле в одну строку, используя sed? Например, я хочу объединить строки с номерами 2001891 и 2001892 в одну строку и записать их обратно в файл в том же месте строки (значение строки 2001893 и ниже будет сдвинуто вверх)?Объединить 2 строки в большом текстовом файле с помощью sed

Я гугле вокруг учебников и учебных пособий по sed, но все они слишком загадочным для меня (те '2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah' означает, что?)

+1

«Некоторые люди, столкнувшись с проблемой Unix, думают:« Я знаю, я использую sed ». Теперь у них две проблемы». - Руководство Unix-Haters http://simson.net/ref/ugh .pdf –

ответ

4

Я не sed гуру, но я думаю, что вы хотите: (. Попробуйте без -i на тестовый файл перед его запуском на важных данных, конечно)

sed -i '2001891N;s/\n//' filename 

$ cat a.dat 
1 
2 
3 
4 
$ sed '2N;s/\n//' a.dat 
1 
23 
4 

Я пробовал более простой sed '2001891s/\n//', но он не работает, когда шаблон \n. Для любого другого шаблона (например, sed '2001891s/a//') он работает. Мне слишком поздно вспоминать об этом больше, но я надеюсь, что один из гуру sed объяснит, что происходит с моей более простой командой sed.

+2

Чтобы объяснить, что здесь происходит: '2001891' - это' адрес'; он говорит 'sed' работать только на строках, соответствующих этому шаблону. 'N' сообщает sed добавить следующую строку в' pattern space' (т. Е. Текст, в котором он сейчас работает). ';' запускает новую команду, и, наконец, 's/\ n //' вычеркивает символ новой строки. –

+0

Да, я собирался добавить объяснение, но вы сделали передо мной. Благодаря! –

+1

Команды 's' и' y' 'sed' не видят новую строку в конце пространства шаблонов (или удерживают) (только те, которые появляются до конца). –

0
$ awk 'NR==2001891{printf $0;getline;print;next}1' file > temp;mv temp file 

ИЛИ

$ awk '{printf (NR==2001891)?$0:$0"\n"}' file > temp;mv temp file 
0

Я уверен, что вы можете сделать некоторая простая магия с использованием cat, перенаправление файлов и команда nl.

+0

Нет, вы не можете. –

+0

Что вы так уверены? –