使用sed在大文本文件中组合2行

时间:2010-01-07 03:08:08

标签: unix sed

如何使用sed将大文本文件中的两条特定相邻行合并为一行?例如,我想将编号为2001891和2001892的行合并为一行,并将其写回同一行位置的文件(意味着行2001893及以下将向上移动)?

我已经在sed搜索了教程和手册,但对我来说都太神秘了(那些'2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah'意味着什么?)

3 个答案:

答案 0 :(得分:4)

我不是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命令来解释发生了什么。

答案 1 :(得分:0)

$ 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

答案 2 :(得分:0)

我相信你可以使用cat,文件重定向和nl命令做一些简单的魔术。