【发布时间】:2018-01-01 05:04:16
【问题描述】:
我们有一个脚本,它比较两个 CSV 文件行并打印“找到匹配”或 每行的第二个文件末尾的“未找到”输出。它工作得非常好,但最近我更新了 Cygwin,不知道出了什么问题,现在它将所有行的输出打印到下一行。新版本的 Cygwin-Python 和 shell 发生了一些变化
下面是我正在使用的代码行:
sed -i "${lineNum}s/$/,Found/" file2.csv
File1.csv
abcd efgh ijkl
mnop qrst xyz
File2.csv
abcd efgh ijkl found
mnop qrst xyzzz not found
它应该像上面那样打印。但它显示如下。
File2.csv
abcd efgh ijkl
found
mnop qrst xyzzz
not found
非常感谢您的帮助。
【问题讨论】:
-
这还不足以提供足够的信息来工作——没有实际看到数据应该是什么以及它是什么的示例,不清楚“将输出打印到下一行”实际上意味着什么.请edit 提供流程异常的输入示例(理想情况下是尽可能小的示例);修改的准确命令;您的预期输出;和你的实际输出。请参阅有关构建minimal reproducible example 的帮助中心指南。
-
顺便说一句,如果这真的是逐行比较,那么使用
sed -i可能不是一个好主意——每次运行该命令时,它都会从头开始重写整个输出文件。使用类似于comm实现的算法,在一次传递中从两个输入生成输出文件的效率要高得多。 -
非常感谢您的建议。我编辑了这个问题。你能再看看吗?
-
谢谢——这不是真正的minimal reproducible example,因为它没有提供(最短的)代码,有人可以用来从输入到实际输出,但它可能已经足够好了.
-
顺便说一句,考虑在您的问题中包含来自
cat -A File2.csv的输出,特别是如果我目前的猜测是错误的。