Объедините 2 строки в большом текстовом файле, используя sed - PullRequest
0 голосов
/ 07 января 2010

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

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

Ответы [ 3 ]

4 голосов
/ 07 января 2010

Я не sed гуру, но я думаю, что вы хотите:

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

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

$ 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.

0 голосов
/ 07 января 2010

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

0 голосов
/ 07 января 2010
$ awk 'NR==2001891{printf $0;getline;print;next}1' file > temp;mv temp file

OR

$ awk '{printf (NR==2001891)?$0:$0"\n"}' file  > temp;mv temp file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...