【问题标题】:Issue while converting file in UNIX [duplicate]在 UNIX 中转换文件时出现问题 [重复]
【发布时间】:2017-02-08 15:56:57
【问题描述】:

我的要求是将管道分隔的文件转换为普通的 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。

【问题讨论】:

标签: excel csv unix converter


【解决方案1】:

您的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

【讨论】:

  • 您好,我尝试执行上述脚本并在记事本中打开文件,但文本后面仍然有负号。请帮忙。
  • 请告诉我使用 tr 命令将负号从尾端交换到前端的脚本。
【解决方案2】:

示例输入:

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

【讨论】:

    【解决方案3】:

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

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

    或者,您可以使用 Data ► Get External Data ► from Text 选项,该选项也会打开向导。

    或者您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多