如何在bash中将多列文本排序到一个分隔符
因此,我有一个包含如下txt值的文件:如何在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/
./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
目标是按以下顺序对文件进行排序:
./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
完全是文件名,其他字段是其他列……这正是我要找的!非常感谢。这正是我要找的!非常感谢。