vim - 如何使用vim,sed或其他类似工具将大文件(100万行)中的成对连续行连接起来?

标签 vim sed large-files text-processing

我需要将第二行的内容上移至上一行,以使line2的数据与line1的数据并排,无论是逗号还是空格分隔的作品。

输入:

line1
line2
line3
line4


输出:

line1 line2
line3 line4


我一直在用简单的录音在vim中进行操作,但是当我告诉它做10万次时,vim似乎崩溃了……我在想sed可能是一个不错的选择,但不确定如何做我想做的事情还是有更好的选择?

每行只包含1个数值,我只有一百万行...

最佳答案

如果我理解正确,那么您有:

line1 
line2
line3
line4
...


而你想要:

line1<SEP>line2
line3<SEP>line4


那么您可以使用(g)awk轻松地做到这一点:

awk 'NR % 2 == 1 { o=$0 ; next } { print o "<sep>" $0 }' INPUTFILE


See it in action here

更新:如果行数为奇数,则上面的代码将省略最后一行(如Martin Stettner所指出的),因此不会:

awk 'NR % 2 == 1 { o=$0 ; next } { print o "<sep>" $0 } END { if ( NR % 2 == 1 ) { print o } }' INPUTFILE


高温超导

关于vim - 如何使用vim,sed或其他类似工具将大文件(100万行)中的成对连续行连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8545538/

相关文章:

vim - 在 MacVim 中通过拆分智能调整窗口大小

c++ - 使用 istream::seekg 是不是太贵了?

python - 将大型 csv 文件读入字典时出现内存错误

vim - 运行 tmux 时映射箭头键

linux - Vim YouCompleteMe 不可用

Vim:删除除当前行之外的所有内容

regex - 如何提取从行首到特定字符串的所有内容?

unix -/bin/sed '/^$/d' |/bin/sed -e 's/^[\t]*//' 是什么意思?

bash - 使用 Bash 的两个列表之间的区别

java - 以良好的性能处理非常大的文件