4

我需要根据第一列中的字符数对文件进行排序。

我不知道该怎么做。我使用的是 Linux,所以 sed/awk/sort 都可用。

.abs 是 bla bla 12
.abc 是 bla se 23 bla
.fe 是 bla bla bla
.jpg 是图片扩展名
.se 用于瑞典域名

我想要的是根据每行第一列的长度对这些行进行排序。有些行以 4 个字符开头,有些以 3 或 2 开头。我希望结果类似于:

.fe 是 bla bla bla
.se 用于瑞典域名
.abs 是 bla bla 12
.abc 是 bla se 23 bla
.jpg 是图片扩展名

这甚至可能吗?

4

3 回答 3

10

将每一行增加第一个单词的长度,然后排序:

awk '{ print length($1) " " $0; }' $FILE | sort -n

如有必要,请在之后删除辅助字段cut -d ' ' -f 2-

于 2013-01-31T12:42:41.753 回答
2

或者你也可以像这样之后使用 sed

awk '{print length($1)" "$0}' temp.txt | sort -k 1,2| sed -re 's/^[0-9]+ //'

于 2013-02-01T01:40:32.987 回答
1

你也可以用 coreutils 来做,虽然效率很低:

paste -d' ' <(cut -d' ' -f1 infile | xargs -l sh -c 'echo "$1" | wc -c' '{}') infile |
  sort -n | cut -d' ' -f2-

或者使用 GNU 并行(如果可用):

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-
于 2013-01-31T13:43:41.647 回答