Linux bcp格式文件和-c开关输出

Linux bcp格式文件和-c开关输出,linux,unix,sap-ase,bcp,Linux,Unix,Sap Ase,Bcp,我试图使用bcp从Sybase ASE数据库中提取记录并将其写入文件。我需要排除数据库中的两个字段,所以我尝试使用format.fmt文件 这是我的业务连续性计划: bcp Rdevdb..TBL_XFER out out1.txt -S$serv -U$user -P$pass -fbcp.fmt -c -t\| 我需要| char作为分隔符 当我使用-c开关时,它似乎同时忽略了格式文件,这是真的吗 当我既不使用-n开关也不使用-c开关来告诉它什么格式,原生或char,它似乎使用原生格式创

我试图使用bcp从Sybase ASE数据库中提取记录并将其写入文件。我需要排除数据库中的两个字段,所以我尝试使用format.fmt文件

这是我的业务连续性计划:

bcp Rdevdb..TBL_XFER out out1.txt -S$serv -U$user -P$pass -fbcp.fmt -c -t\| 
我需要| char作为分隔符

当我使用-c开关时,它似乎同时忽略了格式文件,这是真的吗

当我既不使用-n开关也不使用-c开关来告诉它什么格式,原生或char,它似乎使用原生格式创建文件,因为当我在文本编辑器中打开它时,它会强制它进入十六进制编辑器。。。是这样吗

当我在格式文件中包含-c时,我删除了我不想要的两个字段,它将所有db字段都带到文件中,这就是为什么我认为它会忽略.fmt文件

如果删除-c开关,并在.fmt文件中未包含这两个字段的情况下运行它,则会出现以下错误:在bcp格式文件中发现不正确的主机列号

为了让我的bcp命令给我带来我想要的结果,我在.fmt文件中包括了什么开关组合和什么

这是.fmt文件的一部分。任何表字段名中都没有空格。这不包括字段1或字段2,因为这些是我不希望在文件中出现的字段

10.0
147
3   SYBCHAR 2   6   "|" 3   COVERAGE_CODE
4   SYBCHAR 2   6   "|" 4   DEPT
5   SYBCHAR 2   8   "|" 5   ORG
6   SYBCHAR 2   8   "|" 6   DIV
7   SYBCHAR 2   8   "|" 7   DISTRIBUTE
...
表中有147个字段,但当我将所有字段包括在.fmt文件中时,总共有149个字段,前两行指定版本和字段号


感谢您的帮助。

或者,您可以创建一个只包含您感兴趣的列或偶数行的表视图,然后对该视图使用bcp。似乎您正在将数据传输到一个新的存储库,因此您可能希望继续使用-c作为字符,因为bcp比本机文件更易于共享


我还没有使用-f标志,所以我不能保证它能以这种方式工作。

保持简单。如果您在前两个字段中离开,是否有效?除此之外,作为您问题的一个可能解决方案,我记得即使您得到字段3->n,您也必须给fmt文件编号,以告诉它如何处理您得到的数据,因此您需要编号1->n-2。这意味着要选择f3、f4、f5等。。。从tableX中,这些将以col1、col2、….的形式通过.fmt文件。。。。祝你好运。如果我使用-c开关,它会工作,并且它会将所有字段写入文件,而不是使用fmt文件。但是我不知道如何使用-c,不获取我不想要的两个字段。如果我使用-f开关并使用格式文件,它会工作,但它会以十六进制而不是文本的形式输出。如果我删除这两个字段,它会给出错误。我将尝试对格式文件中的字段重新编号。。。但似乎-f和-c是相互排斥的。如果我使用-f,它会把它写成十六进制。如果我使用-f和-c,它会忽略-f并将其写入文本,而不使用.fmt文件。我确实读了你的原始帖子。我的问题不是要重温你的尝试,而是要给你一些新的想法和尝试/考虑的方法。我真的认为fmt文件必须以列'd1'开始,而不是以3为例,但自从我这样做以来已经6年了,所以它可能已经改变了。我将尝试从重新排序或删除列的案例中找到代码。最后,考虑用一个有用的编辑更新你的问题,你会得到正确的错误信息。祝你好运。