我的文件存在问题。 它有3列,最后一列包含一个巨大的文本字段。 它来自Oracle的CLob,所以它可以长达4k ......
我想将它集成到我的Oracle中,但我无法导入该文件。
是否可以在每一行添加一些分隔符来分割那些巨大的线? 让我们说,添加一个' |' (我的分隔符)每200个字符或类似的东西,所以我可以小部分导入小部分?
当线条没有很大的长度时,诀窍是添加连续的分隔符
例如: 原始文件:
12345678910
12345
将被转化为(如果我每5个人有一个字母)
12345|67891|0
12345||
你认为使用perl或sed是否可行? 非常感谢你的帮助。
编辑:只是为了清除它: 我需要在整个文件中使用相同数量的字段。因此,最长的行将定义我的整个文件中每行所需的字段数。文件的文本包含人的句子。
非常感谢你的帮助。
答案 0 :(得分:1)
echo 12345678901234567890 | sed 's/\(.\{5\}\)/\1|/g'
给出
12345|67890|12345|67890|
调整大括号之间的数字以获得更长的块。
编辑:由于对问题的评论清除了要求,我和awk一起攻击了一些东西,它在第一遍中找到了字段数,并在一秒内拼接了分隔符:#!/bin/sh
awk -v width=5 ' # adjust width as required
BEGIN { maxlen = 0 }
NR == FNR { # first pass
if(length($0) > maxlen) {
maxlen = length($0) # just find the longest line.
}
next
}
{ # second pass
fieldcount = maxlen / width # splice in separators
line = ""
for(i = 0; i < fieldcount; ++i) {
line = line substr($0, 1 + i * width, width) "|"
}
print line # then print line.
}
' foo.txt foo.txt
答案 1 :(得分:0)
sed脚本
sed '
/^.\{0,5\}$/ {
s/\(^.*$\)/&||/g
}
/^.\{5,\}[^|]$/ {
s/.\{5\}/&|/g
} '
或
sed '/^.\{0,5\}$/ {s/\(^.*$\)/&||/g};/^.\{5,\}[^|]$/ {s/.\{5\}/&|/g}'
如果任何行包含0-5个字符 ,此脚本将添加||
,如果该行超过五个字符,则脚本将添加|
该行的每个 5个字符
假设您在名为my_file
123456789100986093486084
12345
81638164864
126817
2394
2347
9487298579275934636975697w8
12
命令行
sed '
/^.\{0,5\}$/ {
s/\(^.*$\)/&||/g
}
/^.\{5,\}[^|]$/ {
s/.\{5\}/&|/g
} ' 'my_file'
或
sed '/^.\{0,5\}$/ {s/\(^.*$\)/&||/g};/^.\{5,\}[^|]$/ {s/.\{5\}/&|/g}' 'my_file'
<强>结果
12345|67891|00986|09348|6084
12345||
81638|16486|4
12681|7
2394||
2347||
94872|98579|27593|46369|75697|w8
12||
脚本如何运作
/^.\{0,5\}$/ {
s/\(^.*$\)/&||/g
}
脚本的第一部分检查所有具有0-5个字符的行。如果为true,则会在这些行的末尾添加||
/^.\{5,\}[^|]$/ {
s/.\{5\}/&|/g
} '
脚本的这一部分会搜索所有包含5个或更多字符且不以||
结尾的行,如果找到这些行,则每添加5个字符|
答案 2 :(得分:0)
试试这个。
sed 's/\([0-9]\{5\}\)/\1|/g' file name.
答案 3 :(得分:0)
sed 's/.\{5\}/&|/g;s/^.\{0,4\}/&|||/' YourFile
|
|||