bash - 根据包含数字和不包含数字的行对 CSV 中的行进行排序

标签 bash shell sorting csv awk

我有一个 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/

相关文章:

c# - BindingList<T>.Sort() 表现得像 List<T>.Sort()

linux - 在没有 cron 和 at 命令的情况下安排脚本

sql - 一次将多条记录存储到数据库表中,然后检查是否有记录丢失

linux - 'cd -' 代表什么?

bash - Git diff - 忽略重新排序

linux - 剪切删除我文件的所有内容

git - 为带有颜色的 git 分支自定义 bash 提示符 (PS1)

listview - 如何在Jquerymobile中动态排序 ListView

javascript - 按数组中的特定字段对数组 (JavaScript) 进行排序

linux - 如何仅匹配主机文件中的前两个主机