【发布时间】:2019-08-02 17:11:25
【问题描述】:
我已经从 shell 创建了一个 CSV。然后我需要按列过滤信息。我使用了这个命令:
$cut -d ';' -f 12,22 big_file.csv
输入看起来像:
ACT;XXXXXX;MCD;881XXXX;881017XXXXXX;ABCD;BMORRR;GEN;88XXXXXXXXXX;00000;01;2;000008608008602;AAAAAAAAAAA;0051;;;;;;093505;
ACT;XXXXXX;MCD;881XXXX;881017XXXXXX;ABCD;BMORRR;GEN;88XXXXXXXXXX;00000;01;3;000008608008602;AAAAAAAAAAA;0051;;;;;;085000;anl@mail.com
输出是:
ID CLIENT;email
00000xxxxxxxxx
00000000xxxxxx;anl@mail.com
如您所见,最后一列没有出现(请注意,第一行中缺少分号)。我想要这个:
ID CLIENT;email
00000xxxxxxxxx;
00000000xxxxxx;anl@mail.com
我有另一个包含信息的 CSV 文件,它可以工作。我已经查看了 csv 并且这些列存在。
【问题讨论】:
-
输入是什么样的?即使输入行没有第 22 列,你想要一个尾随分号是否有问题?
-
请在您的问题中添加示例输入(无描述、无图像、无链接)和该示例输入所需的输出(无评论)。
-
好的。我添加了一个输入。
-
嗯
echo "a;b;" | cut -d';' -f1,3确实输出a;。您确定没有电子邮件的行实际上有足够的分号吗? -
输出中的
ID CLIENT;email来自哪里?不能重复,输入文件有21个字段。你不想-f12,21吗?可能就是这样。也许您的输入中有一些\r字符。所以;在那里,但在0后面