Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting awk,如何在匹配词后按数字对行排序_Sorting_Awk - Fatal编程技术网

Sorting awk,如何在匹配词后按数字对行排序

Sorting awk,如何在匹配词后按数字对行排序,sorting,awk,Sorting,Awk,我有这样一个文本文件: word_1 23.66 word_5 0 word_7 123 word_5 6 word_1 2 word_7 12 word_7 23.7 word_2 21 word_1 3 ... awk -f sort.awk infile 最好使用awk,我如何按照“word_1”后面的数字对行进行排序?我可以给您一些由sed和sort组成的命令序列: sed -r 's/(.*)(word_1 )([^ ]+)(.*)/\3\t&/' your_file |

我有这样一个文本文件:

word_1 23.66 word_5 0 word_7 123
word_5 6 word_1 2 word_7 12
word_7 23.7 word_2 21 word_1 3
...
awk -f sort.awk infile

最好使用awk,我如何按照“word_1”后面的数字对行进行排序?

我可以给您一些由
sed
sort
组成的命令序列:

sed -r 's/(.*)(word_1 )([^ ]+)(.*)/\3\t&/' your_file | sort -n | sed -r 's/[^\t]+\t(.*)/\1/'
  • sed在
    word_1
    后加上数字,在行前加上制表符
  • 排序使用带前缀的数字进行排序
  • 第二个sed删除了带前缀的编号和制表符,保留了原始行

  • GNU awk支持基于索引或值对数组进行排序,请参阅手册页中的
    PROCINFO[“sorted_in”]

    要实现您的目标,请执行以下操作:

    word_1 23.66 word_5 0 word_7 123
    word_5 6 word_1 2 word_7 12
    word_7 23.7 word_2 21 word_1 3
    ...
    
    awk -f sort.awk infile
    
    sort.awk

    输出:

    word_1 23.66 word_5 0 word_7 123
    word_7 23.7 word_2 21 word_1 3
    word_5 6 word_1 2 word_7 12
    

    如果有多条记录具有相同的值,这将覆盖记录,处理此问题的一种方法是将行号添加到键,即
    h[$(i+1),NR]=$0
    Nice。我不知道PROCINFO的事。