在UNIX中转换文件时出现问题

时间:2016-09-30 06:45:28

标签: excel csv unix converter

我的要求是将管道分离文件转换为普通的excel。所以我在UNIX中使用了以下tr命令来执行此操作。 tr '|' ',' < filename.csv > filename_Final.csv当我执行上述命令时,它会将字段的负号带到字段结尾。所以我试着把负号带到字段前面,我找到了正确匹配的UNIX脚本。如果有人遇到类似的情况,请帮助。输入:管道文件

1|abc|-123
2|def|456
3|ijk|789

tr执行后 tr '|' ',' < filename.csv > filename_Final.csv 输出:管道文件分为普通列。执行tr命令后,管道分隔文本被分隔为excel,但它会在文本后面带来负号。 我需要在文本前面使用负号并执行相同的管道分隔文件转换为excel。

1   abc 123-
2   def 456
3   ijk 789

我的要求是将管道分隔文本转换为excel,并在文本前面添加负号。 输入

1|abc|-123
2|def|456
3|ijk|789

预期输出

1       abc     -123
2       def     456
3       ijk     789

请帮助将管道分隔文本转换为excel,并在文本前添加负号。

3 个答案:

答案 0 :(得分:0)

您的tr来电按预期工作。您确定在生成的csv文件中有123-吗?难道只是Excel表示负值吗?请在文本编辑器中检查您的csv文件。

我试过你的例子:

# cat test
1|abc|-123 2|def|456 3|ijk|789
# cat test | tr '|' ','
1,abc,-123 2,def,456 3,ijk,789

答案 1 :(得分:0)

示例输入:

cat csv
1|abc|-123
2|def|456
3|ijk|789

awk解决方案:

awk -F'|' -v OFS="\t" '{$1=$1}1' csv
1       abc     -123
2       def     456
3       ijk     789

要在csv中进行更改:如果您的awk支持就地编辑,请使用-i其他:

awk -F'|' -v OFS="\t" '{$1=$1}1' csv >csv.tmp && mv csv.tmp csv

或旧的tr

tr '|' '\t' <csv
1       abc     -123
2       def     456
3       ijk     789

答案 2 :(得分:0)

我的要求是将管道分离的文件转换为普通的Excel

您可以使用管道在Excel中打开文件,然后使用数据►文本到列向导将其拆分为列,并指定如何处理尾随减号。

或者,您可以使用数据►从文本中获取外部数据►选项,这也将打开向导。

或者您可以使用VBA例程

Option Explicit
Sub GetUnixFile()
    Dim sFile

sFile = Application.GetOpenFilename("Text Files (*.txt; *.csv), *.txt; *.csv")
If sFile = False Then Exit Sub

Workbooks.OpenText sFile, _
    startrow:=1, _
    DataType:=xlDelimited, _
    textqualifier:=xlTextQualifierDoubleQuote, _
    consecutivedelimiter:=False, _
    Tab:=False, semicolon:=False, comma:=False, Space:=False, _
    other:=True, otherchar:="|", _
    trailingminusnumbers:=True


End Sub