我需要根据第一列中的字符数对文件进行排序。
我不知道如何解决这个问题。我正在使用Linux,所以sed / awk / sort都可用。
.abs is bla bla 12 .abc is bla se 23 bla .fe is bla bla bla .jpg is pic extension .se is for swedish domains
我想要的是根据每行中第一列的长度对这些行进行排序。 有些行以4个字符开头,有些以3或2开头。我希望结果如下:
.fe is bla bla bla .se is for swedish domains .abs is bla bla 12 .abc is bla se 23 bla .jpg is pic extension
这甚至可能吗?
答案 0 :(得分:10)
按第一个单词的长度增加每一行,然后排序:
awk '{ print length($1) " " $0; }' $FILE | sort -n
如有必要,请事后用cut -d ' ' -f 2-
删除辅助字段。
答案 1 :(得分:2)
或者你也可以像之后那样使用sed
awk '{print length($1)" "$0}' temp.txt | sort -k 1,2| sed -re 's/^[0-9]+ //'
答案 2 :(得分:1)
您也可以使用coreutils,尽管效率很低:
paste -d' ' <(cut -d' ' -f1 infile | xargs -l sh -c 'echo "$1" | wc -c' '{}') infile |
sort -n | cut -d' ' -f2-
如果可用,则使用GNU parallel:
paste -d' ' <(cut -d' ' -f1 infile | parallel wc -c '<<< {}') infile |
sort -n | cut -d' ' -f2-
或者使用bash:
<infile while read c1 rest; do echo ${#c1} "$c1" "$rest"; done |
sort -n | cut -d' ' -f2-