【问题标题】:Issue with negative sign after executing the tr command in UNIX在 UNIX 中执行 tr 命令后出现负号问题
【发布时间】:2016-09-29 22:48:24
【问题描述】:

我的要求是将管道分隔的文件转换为普通的 excel。 所以我在 UNIX 中使用了下面的 tr 命令来执行这个操作。 tr'|' ',' 文件名_Final.csv 当我执行上述命令时,它会将字段的负号带到字段末尾。 因此,我尝试将负号放在我找不到正确匹配的 UNIX 脚本的字段前面。 如果有人遇到类似的情况,请提供帮助。 输入:管道文件

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

tr执行后

tr '|' ',' < filename.csv > filename_Final.csv

输出: 管道文件分叉成普通列

1   abc 123-
2   def 456
3   ijk 789

我的要求是将负号放在字段前面。

【问题讨论】:

  • 这很奇怪,减号不是搜索和替换字符串的一部分。您显示的输出不能是转换后的文件,因为分隔符应该是逗号,但它看起来像制表符。这是导入后的吗?当我运行相同的命令时,我得到 -123。
  • 我怀疑您的文件中有一些控制字符。 od -c filename.csv 透露了什么?

标签: csv unix


【解决方案1】:

代替tr,您可以使用awk 覆盖Output-Field-Separator,在您的情况下为|

awk '{$1=$1}1' FS="|" OFS=" " filename.csv > filename_Final.csv

上述命令将OFS 覆盖到单个空格,因此您的输入文件

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

转换成

1 abc -123
2 def 456
3 ijk 789

从而不会干扰存在的列条目。

【讨论】:

  • 别忘了accept the answer,因为您的问题现在已经解决了。
  • 我的要求是将负号放在字段前面并将.csv转换为excel。请帮忙解决这个问题
  • @Abirami:它已经在场上,我不知道你为什么一直问它。
  • 它把负号放在前面,但我需要输入带有管道扩展名的 .csv 文件来转换为文本到列,这意味着输入文件字符应该像在 excel 中一样分隔到每一列中。这是我的问题。
猜你喜欢
  • 2018-05-19
  • 2011-03-28
  • 2021-02-27
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多