我有一个从mysql导出的文件,使用命令select into outfile转义为“\”...但是,某些字段中有换行导致断行,即mysql中的记录分为两行导出文件。仔细分析后,我发现断线以“\”结尾。所以我想将这样的行合并到下一行。我怎么能这样做?
示例输入:
hello
world\
Thank
you\
are
awesome
输出:
hello
worldThank
youare
awesome
文件有点大,可以是10 GB左右。
答案 0 :(得分:2)
使用sed:
sed 'N;s/\\\n//;P;D;' file
答案 1 :(得分:2)
使用awk
:
awk '/\\$/{sub(/\\$/,"");printf $0; next}1' infile
<强>解释强>
/\\$/
使用\
sub(/\\$/,"")
替换,\
为null printf $0; next
没有行分隔符的打印记录,转到下一行}1
1
在结尾处执行默认操作print $0
,因此未跳过的行将按原样打印。 测试结果:
$ cat infile
hello
world\
Thank
you\
are
awesome
$ awk '/\\$/{sub(/\\$/,"");printf $0; next}1' infile
hello
worldThank
youare
awesome
答案 2 :(得分:0)
你没有提供一个例子,但如果你有类似下面的内容,那么......它适用于GNU sed(我在OS X上)
Sub IndividualMacros()
Dim i&, w As Range
For Each w In ActiveDocument.Words
If w.Text Like "*[A-Z,a-z]*" Then
i = i + 1
w.InsertBefore i & " "
End If
Next
End Sub
答案 3 :(得分:0)
另一个通过操作输出记录分隔符
使用awk
$ awk '{ORS = sub(/\\$/,"") ? "" : "\n"} 1' ip.txt
hello
worldThank
youare
awesome
如果替换成功,则清除ORS
(在行末删除\
)否则指定通常的换行符
使用GNU awk
,只需使用\
后跟换行符作为记录分隔符。并将空字符串清空为ORS
,因为这些字符必须刚删除
$ gawk -v RS='\\\\\n' -v ORS= '1' ip.txt
hello
worldThank
youare
awesome
使用perl
$ perl -pe 's/\\\n//' ip.txt
hello
worldThank
youare
awesome
输入行中的换行符不会像sed/awk
一样被移除(需要选项-l
)。因此,逻辑简化了删除换行符以及行尾的\