我有一堆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
任何人都可以帮助我吗?
由于
答案 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