我有一个 4 列的 CSV 文件。我想对行进行排序,这样,第三列中某处包含任何数字的行被推到文档的末尾,第三列中没有数字的行被放在开头。如何以这种方式对文件进行排序?
更新:
为澄清起见,我需要将包含任意数字(即 [0-9]
的匹配项)的行移动到第三列字母中的某处(该行的第三列可能包含其他符号)。空格并不重要。例如
dog, eats chicken, has 4 legs, does not like cats
cat, eats mice, has a tail, does not like water
mouse, eats bugs, has 4 legs, does not like cats
elephant, eats peanuts, has a trunk, does not like mice
将排序为:
cat, eats mice, has a tail, does not like water
elephant, eats peanuts, has a trunk, does not like mice
dog, eats chicken, has 4 legs, does not like cats
mouse, eats bugs, has 4 legs, does not like cats
最佳答案
像这样的东西应该可以工作:
awk 'BEGIN {FS=","; OFS=","}; {print match($3,/[0-9]/), $0}' <file> | sort | cut -d, -f2-
策略是
- 使用
awk
在每一行的开头插入找到数字的索引(如果没有找到数字则为 0) - 使用
sort
对所有行进行排序 - 最后,使用
cut
删除由awk
前置的数字。
关于bash - 根据包含数字和不包含数字的行对 CSV 中的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8984455/