仅根据第一列将CSV文件从最长到最短排序

时间:2012-03-04 06:08:00

标签: bash

我有一个像这样的CSV文件:

cat, animal
dog, animal
bear, animal
elephant, animal
tree, object

我想根据第一列对数据进行排序,从最长的单词到最短的单词。 E.g:

elephant, animal
bear, animal
tree, object
cat, animal
dog, animal

如何做到这一点?

2 个答案:

答案 0 :(得分:3)

$ awk -F',' '{print length($1),$0}' input.csv | sort -k1nr | cut -d' ' -f 2-
elephant, animal
bear, animal
tree, object
cat, animal
dog, animal

说明:

  • awk 添加一列记录csv列的长度#1
  • sort 按数字排序第一列
  • cut 删除第一列

答案 1 :(得分:1)

awk -F, '{print length($0) ":" $0}' csvfile |
sort -t: -k 1nr -k 2 |
sed 's/^[0-9]*://'

添加一个长度,在长度上反向排序,然后按字母顺序排列在线的其余部分,然后再次取消长度。在测试数据上,它给出了所需的结果。

它是否算作bash或许有点值得商榷。