【问题标题】:No detect new lines inside a file for contruct a csv file in bash没有检测文件中的新行以在 bash 中构建 csv 文件
【发布时间】:2021-01-19 21:40:33
【问题描述】:

我正在制作一个 csv 构造函数,但我遇到了一些问题。

我有这样的文件characteristics.tmp

1083108343
1083108360
1083108378
1083108386

我必须构建成这种格式:Name, "1083108343 ,1083108360 , 1083108378,1083108386";
我试过这个

cat characteristics.tmp| paste -s -d, -

我也试过tr '\n' ','

但是输出就像只有一个元素一样。我用 xxd 检查文件,字符 0d0a 是否应该在每一行的末尾?那么为什么没有检测到其他人呢?

,1083108386

【问题讨论】:

  • 0d0a 听起来像是在 Windows 上。 dos2unix < characteristics.tmp | tr '\n' , | sed 's/,$/\n/' 可以解决问题。
  • 这可能会有所帮助:dos2unix <characteristics.tmp | paste -s -d ','
  • @Cyrus 是的,那更好。
  • 没有兄弟,我在 Ubuntu 18 上:D 但兄弟我发现了一些有趣的东西,我将文件传递给 xxd features.tmp 并看到这个“3130 3833 3130 3833 3433 0d0a 3130”,原因有一个所有行末尾的“ 0d0a”也许这就是粘贴和tr无法正常工作的原因。

标签: bash csv parsing scripting


【解决方案1】:

赛勒斯兄弟非常感谢你。我有解决方案可能对某人有用

该文件在所有结束行中都有 0d0a,就像 Windows 一样。这就是为什么当我传递给 xxd 时,这个 0d0a 出现并且 bash 仅适用于 0a 作为新行,所以我将文件传递给 dos2unix,如你所说,结果文件只有 0a,这是 unix 工作方式的新行。

之前

xxd 文件.tmp

00000000: 3130 3633 3234 3234 3432 **0d0a** 1063242442..

dos2unix 之后

00000000: 3130 3633 3234 3234 3432 **0a** 1063242442.

最后像 xargs,tr,paste 这样的所有命令都能正常工作。

谢谢大家:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多