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
如何在bash中将多列文本排序到一个分隔符_Bash_Sorting_Text_Split_Multiple Columns - Fatal编程技术网

如何在bash中将多列文本排序到一个分隔符

如何在bash中将多列文本排序到一个分隔符,bash,sorting,text,split,multiple-columns,Bash,Sorting,Text,Split,Multiple Columns,因此,我有一个包含如下txt值的文件: ./run_1920x1080_2000_8_medium.txt encoded 279 frames, 44.63 fps, 1835.78 kb/s ./run_1920x1080_6000_8_medium.txt encoded 279 frames, 29.36 fps, 5504.96 kb/s ./run_1920x1080_2000_8_fast.txt encoded 279 frames, 46.96 fps, 1851.13 kb/

因此,我有一个包含如下txt值的文件:

./run_1920x1080_2000_8_medium.txt encoded 279 frames, 44.63 fps, 1835.78 kb/s
./run_1920x1080_6000_8_medium.txt encoded 279 frames, 29.36 fps, 5504.96 kb/s
./run_1920x1080_2000_8_fast.txt encoded 279 frames, 46.96 fps, 1851.13 kb/s
./run_1920x1080_4000_4_faster.txt encoded 279 frames, 32.74 fps, 3631.55 kb/s
./soccer_1920x1080_4000_6_veryfast.txt encoded 299 frames, 79.48 fps, 4003.93 kb/s
./greenleaves_1920x1080_6000_2_faster.txt encoded 299 frames, 16.12 fps, 6406.48 kb/s
./greenleaves_1920x1080_2000_2_veryslow.txt encoded 299 frames, 2.47 fps, 2076.77 kb/s
./run_1920x1080_2000_6_slower.txt encoded 279 frames, 11.36 fps, 1822.16 kb/s
./greenleaves_1920x1080_2000_6_slower.txt encoded 299 frames, 11.38 fps, 2069.65 kb/s
./soccer_1920x1080_4000_8_faster.txt encoded 299 frames, 53.87 fps, 3970.18 kb/s
./soccer_1920x1080_6000_6_superfast.txt encoded 299 frames, 126.51 fps, 6068.11 kb/s
./greenleaves_1920x1080_2000_8_slow.txt encoded 299 frames, 17.96 fps, 2055.69 kb/s
./greenleaves_1920x1080_2000_10_superfast.txt encoded 299 frames, 137.57 fps, 2081.60 kb/s
./greenleaves_1920x1080_6000_10_ultrafast.txt encoded 299 frames, 286.71 fps, 6548.01 kb/s
./run_1920x1080_6000_4_medium.txt encoded 279 frames, 19.01 fps, 5452.17 kb/s
./soccer_1920x1080_2000_4_medium.txt encoded 299 frames, 28.57 fps, 1965.14 kb/s
./greenleaves_1920x1080_6000_10_veryslow.txt encoded 299 frames, 5.55 fps, 6551.35 kb/s
./soccer_1920x1080_2000_10_medium.txt encoded 299 frames, 37.78 fps, 1947.80 kb/s
./run_1920x1080_4000_2_faster.txt encoded 279 frames, 18.91 fps, 3637.35 kb/s
./run_1920x1080_6000_10_slower.txt encoded 279 frames, 9.22 fps, 5580.57 kb/s
./greenleaves_1920x1080_6000_4_slow.txt encoded 299 frames, 8.22 fps, 6387.91 kb/s
./greenleaves_1920x1080_2000_4_veryfast.txt encoded 299 frames, 63.49 fps, 2090.72 kb/s
./run_1920x1080_6000_8_superfast.txt encoded 279 frames, 127.40 fps, 5464.33 kb/s
./run_1920x1080_4000_2_slow.txt encoded 279 frames, 7.72 fps, 3638.49 kb/s
./run_1920x1080_2000_6_slow.txt encoded 279 frames, 18.94 fps, 1832.48 kb/s
./run_1920x1080_6000_10_superfast.txt encoded 279 frames, 124.19 fps, 5477.19 kb/s
sort -t_ -k1,1 -k5,5 -k4,4
目标是按以下顺序对文件进行排序:

  • 第1列(文件名)
  • 第5列(预设)
  • 第4列(螺纹)
  • 第3列(比特率)
  • 我所做的是:

    ./run_1920x1080_2000_8_medium.txt encoded 279 frames, 44.63 fps, 1835.78 kb/s
    ./run_1920x1080_6000_8_medium.txt encoded 279 frames, 29.36 fps, 5504.96 kb/s
    ./run_1920x1080_2000_8_fast.txt encoded 279 frames, 46.96 fps, 1851.13 kb/s
    ./run_1920x1080_4000_4_faster.txt encoded 279 frames, 32.74 fps, 3631.55 kb/s
    ./soccer_1920x1080_4000_6_veryfast.txt encoded 299 frames, 79.48 fps, 4003.93 kb/s
    ./greenleaves_1920x1080_6000_2_faster.txt encoded 299 frames, 16.12 fps, 6406.48 kb/s
    ./greenleaves_1920x1080_2000_2_veryslow.txt encoded 299 frames, 2.47 fps, 2076.77 kb/s
    ./run_1920x1080_2000_6_slower.txt encoded 279 frames, 11.36 fps, 1822.16 kb/s
    ./greenleaves_1920x1080_2000_6_slower.txt encoded 299 frames, 11.38 fps, 2069.65 kb/s
    ./soccer_1920x1080_4000_8_faster.txt encoded 299 frames, 53.87 fps, 3970.18 kb/s
    ./soccer_1920x1080_6000_6_superfast.txt encoded 299 frames, 126.51 fps, 6068.11 kb/s
    ./greenleaves_1920x1080_2000_8_slow.txt encoded 299 frames, 17.96 fps, 2055.69 kb/s
    ./greenleaves_1920x1080_2000_10_superfast.txt encoded 299 frames, 137.57 fps, 2081.60 kb/s
    ./greenleaves_1920x1080_6000_10_ultrafast.txt encoded 299 frames, 286.71 fps, 6548.01 kb/s
    ./run_1920x1080_6000_4_medium.txt encoded 279 frames, 19.01 fps, 5452.17 kb/s
    ./soccer_1920x1080_2000_4_medium.txt encoded 299 frames, 28.57 fps, 1965.14 kb/s
    ./greenleaves_1920x1080_6000_10_veryslow.txt encoded 299 frames, 5.55 fps, 6551.35 kb/s
    ./soccer_1920x1080_2000_10_medium.txt encoded 299 frames, 37.78 fps, 1947.80 kb/s
    ./run_1920x1080_4000_2_faster.txt encoded 279 frames, 18.91 fps, 3637.35 kb/s
    ./run_1920x1080_6000_10_slower.txt encoded 279 frames, 9.22 fps, 5580.57 kb/s
    ./greenleaves_1920x1080_6000_4_slow.txt encoded 299 frames, 8.22 fps, 6387.91 kb/s
    ./greenleaves_1920x1080_2000_4_veryfast.txt encoded 299 frames, 63.49 fps, 2090.72 kb/s
    ./run_1920x1080_6000_8_superfast.txt encoded 279 frames, 127.40 fps, 5464.33 kb/s
    ./run_1920x1080_4000_2_slow.txt encoded 279 frames, 7.72 fps, 3638.49 kb/s
    ./run_1920x1080_2000_6_slow.txt encoded 279 frames, 18.94 fps, 1832.48 kb/s
    ./run_1920x1080_6000_10_superfast.txt encoded 279 frames, 124.19 fps, 5477.19 kb/s
    
    sort -t_ -k1,1 -k5,5 -k4,4
    
    我能够生成:

    ./soccer_1920x1080_6000_10_ultrafast.txt encoded 299 frames, 289.95 fps, 6213.30 kb/s
    ./soccer_1920x1080_6000_8_ultrafast.txt encoded 299 frames, 297.17 fps, 6161.19 kb/s
    ./soccer_1920x1080_2000_6_ultrafast.txt encoded 299 frames, 309.66 fps, 2007.68 kb/s
    ./soccer_1920x1080_2000_8_ultrafast.txt encoded 299 frames, 313.22 fps, 2008.35 kb/s
    ./soccer_1920x1080_4000_6_ultrafast.txt encoded 299 frames, 326.60 fps, 4043.20 kb/s
    ./soccer_1920x1080_2000_10_ultrafast.txt encoded 299 frames, 328.80 fps, 2002.80 kb/s
    ./soccer_1920x1080_2000_2_ultrafast.txt encoded 299 frames, 53.80 fps, 1998.31 kb/s
    ./soccer_1920x1080_4000_2_ultrafast.txt encoded 299 frames, 80.76 fps, 4001.73 kb/s
    ./soccer_1920x1080_6000_2_ultrafast.txt encoded 299 frames, 94.61 fps, 6017.98 kb/s
    ./soccer_1920x1080_2000_2_veryfast.txt encoded 299 frames, 29.26 fps, 1983.19 kb/s
    ./soccer_1920x1080_6000_2_veryfast.txt encoded 299 frames, 30.87 fps, 6123.24 kb/s
    ./soccer_1920x1080_4000_2_veryfast.txt encoded 299 frames, 42.24 fps, 4021.40 kb/s
    ./soccer_1920x1080_6000_4_veryfast.txt encoded 299 frames, 56.77 fps, 6104.80 kb/s
    ./soccer_1920x1080_4000_4_veryfast.txt encoded 299 frames, 58.16 fps, 4006.02 kb/s
    ./soccer_1920x1080_2000_4_veryfast.txt encoded 299 frames, 59.07 fps, 1968.70 kb/s
    ./soccer_1920x1080_6000_8_veryfast.txt encoded 299 frames, 72.76 fps, 6125.40 kb/s
    ./soccer_1920x1080_4000_8_veryfast.txt encoded 299 frames, 75.88 fps, 3988.52 kb/s
    ./soccer_1920x1080_2000_8_veryfast.txt encoded 299 frames, 78.52 fps, 1952.13 kb/s
    ./soccer_1920x1080_4000_6_veryfast.txt encoded 299 frames, 79.48 fps, 4003.93 kb/s
    ./soccer_1920x1080_6000_6_veryfast.txt encoded 299 frames, 81.29 fps, 6141.92 kb/s
    ./soccer_1920x1080_4000_10_veryfast.txt encoded 299 frames, 82.81 fps, 3987.88 kb/s
    ./soccer_1920x1080_6000_10_veryfast.txt encoded 299 frames, 83.13 fps, 6148.43 kb/s
    ./soccer_1920x1080_2000_10_veryfast.txt encoded 299 frames, 84.36 fps, 1953.51 kb/s
    ./soccer_1920x1080_2000_6_veryfast.txt encoded 299 frames, 85.84 fps, 1966.70 kb/s
    ./soccer_1920x1080_6000_2_veryslow.txt encoded 299 frames, 2.11 fps, 6100.42 kb/s
    

    我无法对第4列进行正确排序,因为第5列被认为是最后一个“\u1”之后的所有内容。那么,如何在忽略“.txt”后面第5列中的所有内容的同时对输入进行排序呢?

    一个不完美的解决方案是将第5列定义为固定长度字段:
    -k5,5.8
    。这假设该字段中的任何两个不同值在前八个字符中都不同,并且所有值的长度至少为七个字符(包括空格),不应改变任何内容

    顺便说一下,数字字段应该有
    n
    修饰符--
    -k4,4n
    --这样
    10
    就不会在
    8
    之前排序

    如果上面的数字
    8
    没有合适的值,您唯一的选择是在排序之前将行分开,然后恢复。例如:

    sed 's/ /_/' file |
    sort -t_ -k1,1 -k5,5 -k4,4n -k3,3n |
    sed 's/\(\([^_]*_)\{4\}[^_]*\)_/\1 /'
    

    第一个
    sed
    将每行的第一个空格改为下划线,第二个将第五个下划线改回空格。

    一个不完美的解决方案是将第5列定义为固定长度字段:
    -k5,5.8
    。这假设该字段中的任何两个不同值在前八个字符中都不同,并且所有值的长度至少为七个字符(包括空格),不应改变任何内容

    顺便说一下,数字字段应该有
    n
    修饰符--
    -k4,4n
    --这样
    10
    就不会在
    8
    之前排序

    如果上面的数字
    8
    没有合适的值,您唯一的选择是在排序之前将行分开,然后恢复。例如:

    sed 's/ /_/' file |
    sort -t_ -k1,1 -k5,5 -k4,4n -k3,3n |
    sed 's/\(\([^_]*_)\{4\}[^_]*\)_/\1 /'
    

    第一个
    sed
    将每行的第一个空格改为下划线,第二个将第五个下划线改回空格。

    为什么要使用
    \u
    作为字段分隔符?如果原因是在5之后排序10(数字10>5,但作为字符串10<5),请查看
    sort
    是否有
    -V
    选项(版本排序),这只是代码输出的内容,我对此没有发言权。我的意思是,为什么在sort命令中使用
    \uu
    作为分隔符?我上面提供的输入是由不同命令生成的较大输出文件的一部分。我无法更改它,因此使用“u”作为分隔符。好的,我解释了
    /soccer\u 1920x1080\u 6000\u 2\u veryslow.txt
    完全是文件名,其他字段是其他列……为什么要使用
    \ucode>作为字段分隔符?如果原因是在5之后排序10(数字10>5,但作为字符串10<5),请查看
    sort
    是否有
    -V
    选项(版本排序),这只是代码输出的内容,我对此没有发言权。我的意思是,为什么在sort命令中使用
    \uu
    作为分隔符?我上面提供的输入是由不同命令生成的较大输出文件的一部分。我无法更改它,因此使用“u”作为分隔符。好的,我解释了
    /soccer\u 1920x1080\u 6000\u 2\u veryslow.txt
    完全是文件名,其他字段是其他列……这正是我要找的!非常感谢。这正是我要找的!非常感谢。