如何使用sed
将大文本文件中的两条特定相邻行合并为一行?例如,我想将编号为2001891和2001892的行合并为一行,并将其写回同一行位置的文件(意味着行2001893及以下将向上移动)?
我已经在sed
搜索了教程和手册,但对我来说都太神秘了(那些'2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah'
意味着什么?)
答案 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命令做一些简单的魔术。