猫|在bash中按名称排序csv文件

时间:2014-03-10 23:57:17

标签: linux bash csv command-line-interface

我有一堆csv文件,我想将它们保存在一个按名称排序的文件中

我用

cat *.csv | sort -t\ -k2 -n *.csv > output.csv

适用于a001,a002,a010这样的命名。 A100

但是在我的文件中,名字有点像fup所以它们就像a1。 a2。 A10。 A100

我写的命令会安排我这样的事情:

cn201
cn202
cn202
cn203
cn204
cn99
cn98
cn97
cn96
..
cn9

任何人都可以帮助我吗?

由于

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望使用-V(版本排序)标志而不是-n。这只适用于GNU排序,但可能就是你正在使用的那种。

但是,这取决于您希望如何对前缀进行排序。

答案 1 :(得分:0)

如果您没有-V选项,sort可让您更准确地了解哪些字符构成排序键。

sort -t\ -k2.3n *.csv > output.csv

.3告诉sort要排序的键以第二个字段的第3个字符开头,有效地跳过cn前缀。您可以将n直接放在字段说明符中,这可以为您节省两个完整的字符,但更重要的是,对于更复杂的排序,您可以将该键仅作为数字处理,而不是全局应用-n (如果您指定多个使用-k的多个键,则只会出现问题。)

答案 2 :(得分:0)

直播服务器上的排序版本是2006年的5.97 所以很少有东西不能正常工作。

然而,下面的代码是我的解决方案

    #!/bin/bash
echo "This script reads all CSVs into a single file (clusters.csv) in this directory"
for filers in *.csv
do

echo "" >> clusters.csv
echo "--------------------------------" >> clusters.csv
echo $filers >> largefile.txt
echo "--------------------------------" >> clusters.csv
cat $filers >> clusters.csv

done

或者如果你想在一个命令中保持简单

awk 'FNR > 1' *.csv > clusers.csv