我有一个由IBMs从Z/OS传递更改数据生成的平面文件。数据中有新行或\n
。我已经找到了一种方法,用awk命令替换其中的大部分,但似乎有一个小错误。如果有奇数个引号的行以引号结尾,则不会将\n
替换为空格。不管是什么原因,我不得不循环两次才能得到大部分。我只剩下一条记录,它仍然具有\n
。这是一个样品。在
"2013-11-19 10:09:09","0","I","NOT SET ","
simple string "
基本上需要:
^{pr2}$以下是我使用的代码:
#For loop#
for a in 1 2
do
awk -F'"' '$NF""{printf("%s ", $0);next}1' $1 > $1.filter
rm -f $1
mv $1.filter $1
echo $a
done
这个文件中有大约10万条记录。它被datastage接收,但是看到\n
抛出该记录,因为它认为下一行应该是一个新记录。在
谢谢, 乔希
编辑:
我发现了这个Perl命令,它可以做任何事情,但最后还是出现了与上面一样的错误。在
$ perl -p -le 's/\n+/ /g'
我研究了glennjackman的建议,并在python中找到了一个解决方案。下面是我使用Python编写的代码:
谢谢大家的帮助。希望有同样问题的人会发现这个。这个解决方案唯一的问题是它在所有字段(包括空字段)周围添加引号。在
谢谢,乔希
编辑:
我能够使用perl快速删除彼此旁边的所有双引号。在
perl -pi -le 's/""//g' data
我会使用带有CVS解析器的语言。尝试解析当前行,如果有错误,请连接下一行并重试:例如,使用ruby:
^{pr2}$有一种方法:
在伪代码中
^{pr2}$输出示例:
注意,任何用反斜杠转义的引号都会破坏它(
"foo\"bar"
),而用引号转义的引号("foo""bar"
)则可以。确保你知道你使用的CSV方言。在相关问题 更多 >
编程相关推荐