我已经陷入困境几天了。也许你的大脑比我大!
我收到了一堆CSV文件,我希望它们连接成一个.csv文件,数字排序。好的,首先遇到的问题是ID(我想按ID排序)名称。 例如
sort -f *.csv > output.csv
如果我有id001,id002,id010,id100等标准ID,这将有效
但我的id就像id1,id2,id10,id100,这使我的排序工作不准确。
确定
sort -t, -V *.csv > output.csv
- 这在我的测试机器上完美运行(sort --version GNU coreutils 8.5.0),但我的工作机器获得了5.3.0排序版本(并且他们没有实现 - V语法就可以了)我无法更新它!
我觉得这样的不幸和不幸 如果你有更好的主意,请带上它。
我的csv文件看起来像
cn41 AQ34070YTW CDEAQ34070YTW 9C:B6:54:08:A3:C6 9C:B6:54:08:A3:C4
cn42 AQ34070YTY CDEAQ34070YTY 9C:B6:54:08:A4:22 9C:B6:54:08:A4:20
cn43 AQ34070YV1 CDEAQ34070YV1 9C:B6:54:08:9F:0E 9C:B6:54:08:9F:0C
cn44 AQ34070YV3 CDEAQ34070YV3 9C:B6:54:08:A3:7A 9C:B6:54:08:A3:78
cn45 AQ34070YW7 CDEAQ34070YW7 9C:B6:54:08:25:22 9C:B6:54:08:25:20
这实际上是来自csv的复制/粘贴。所以,让我们说,这是我的第一个CSV。而另一个看起来像
cn201 AQ34070YTW CDEAQ34070YTW 9C:B6:54:08:A3:C6 9C:B6:54:08:A3:C4
cn202 AQ34070YTY CDEAQ34070YTY 9C:B6:54:08:A4:22 9C:B6:54:08:A4:20
cn203 AQ34070YV1 CDEAQ34070YV1 9C:B6:54:08:9F:0E 9C:B6:54:08:9F:0C
cn204 AQ34070YV3 CDEAQ34070YV3 9C:B6:54:08:A3:7A 9C:B6:54:08:A3:78
cn205 AQ34070YW7 CDEAQ34070YW7 9C:B6:54:08:25:22 9C:B6:54:08:25:20
期待您的阅读!
此致
答案 0 :(得分:1)
您可以使用从-kX.Y
字符开始的X
列Y
,以及-n
的数据:
sort -t, -k2.3 -n *csv
根据您的示例文件,它会生成:
$ sort -t, -k2.3 -n file
,id1,aaaaaa,bbbbbbbbbb,cccccccccccc,ddddddd
,id2,aaaaaa,bbbbbbbbbb,cccccccccccc,ddddddd
,id10,aaaaaa,bbbbbbbbbb,cccccccccccc,ddddddd
,id40,aaaaaa,bbbbbbbbbb,cccccccccccc,ddddddd
,id101,aaaaaa,bbbbbbbbbb,cccccccccccc,ddddddd
,id201,aaaaaaaaa,bbbbbbbbbb,ccccccccccc,ddddddd
对于您的输入,我会这样做:
$ cat *csv | sort -k1.3 -n
cn41 AQ34070YTW CDEAQ34070YTW 9C:B6:54:08:A3:C6 9C:B6:54:08:A3:C4
cn42 AQ34070YTY CDEAQ34070YTY 9C:B6:54:08:A4:22 9C:B6:54:08:A4:20
cn43 AQ34070YV1 CDEAQ34070YV1 9C:B6:54:08:9F:0E 9C:B6:54:08:9F:0C
cn44 AQ34070YV3 CDEAQ34070YV3 9C:B6:54:08:A3:7A 9C:B6:54:08:A3:78
cn45 AQ34070YW7 CDEAQ34070YW7 9C:B6:54:08:25:22 9C:B6:54:08:25:20
cn201 AQ34070YTW CDEAQ34070YTW 9C:B6:54:08:A3:C6 9C:B6:54:08:A3:C4
cn202 AQ34070YTY CDEAQ34070YTY 9C:B6:54:08:A4:22 9C:B6:54:08:A4:20
cn203 AQ34070YV1 CDEAQ34070YV1 9C:B6:54:08:9F:0E 9C:B6:54:08:9F:0C
cn204 AQ34070YV3 CDEAQ34070YV3 9C:B6:54:08:A3:7A 9C:B6:54:08:A3:78
cn205 AQ34070YW7 CDEAQ34070YW7 9C:B6:54:08:25:22 9C:B6:54:08:25:20
答案 1 :(得分:1)
如果你的CSV格式是固定的,你可以使用decorate-sort-undecorate模式的shell等价物:
cat *.csv | sed 's/^,id//' | sort -n | sed 's/^/,id/' >output.csv
即使在古代版-n
中也存在sort
选项。
更新:更新后的输入包含一个带有不同前缀的数字,并且位于该行的不同位置。这是一个处理两种输入的版本,以及在行中某处有数字的其他输入,按第一个数字排序:
cat *.csv | sed 's/^\([^0-9]*\)\([0-9][0-9]*\)/\2 \1\2/' \
| sort -n \
| sed 's/^[^ ]* //' > output.csv
答案 2 :(得分:0)
您可以尝试-g
选项:
sort -t, -k 2.3 -g fileName
-t分隔符
-k键/列
-g通用数字排序