我有一个包含四列的文本文件。我需要读取到文件末尾并打印第 3 列(前 5 个值)和第 1 列中的最高数字。
输入文件
xm|340034177|ref|RT_235820.1| 139697 192 0
xm|161622288|ref|RT_340093.1| 153819 2607 0
xm|75755638|ref|RT_557407.1| 153821 1937 0
xm|108773031|ref|RT_678101.1| 161452 1688 0
xm|30352011|ref|RT_784766.1| 150568 105 0
Run Code Online (Sandbox Code Playgroud)
输出.txt
xm|161622288|ref|RT_340093.1| 2607
xm|75755638|ref|RT_557407.1| 1937
xm|108773031|ref|RT_678101.1| 1688
xm|340034177|ref|RT_235820.1| 192
xm|30352011|ref|RT_784766.1| 105
Run Code Online (Sandbox Code Playgroud)
sort -k3n,3 filename | tail -5 | cut -d " " -f1,6-7
Run Code Online (Sandbox Code Playgroud)
上面的命令将在第三个字段上对文件进行排序。现在,我将此输出传送到tail
命令以打印第 3 列中的前 5 个数字。但是,如果您只需要输出中的第一列和第三列,则可以将输出通过管道传输到cut
命令。
测试
cat filename
T_235820.1| 139697 192 0
xm|161622288|ref|RT_340093.1| 153819 2607 0
xm|75755638|ref|RT_557407.1| 153821 1937 0
xm|108773031|ref|RT_678101.1| 161452 1688 0
xm|30352011|ref|RT_784766.1| 150568 105 0
T_235820.1| 139697 192 0
xm|161622288|ref|RT_340093.1| 153819 607 0
xm|75755638|ref|RT_557407.1| 153821 937 0
xm|108773031|ref|RT_678101.1| 161452 1881 0
xm|30352011|ref|RT_784766.1| 150568 1051 0
Run Code Online (Sandbox Code Playgroud)
现在,我在这个文件上运行上面的命令。
sort -k3n,3 filename | tail -5 | cut -d " " -f1,6-7
Run Code Online (Sandbox Code Playgroud)
我得到的输出是,
xm|30352011|ref|RT_784766.1| 1051
xm|108773031|ref|RT_678101.1| 1688
xm|108773031|ref|RT_678101.1| 1881
xm|75755638|ref|RT_557407.1| 1937
xm|161622288|ref|RT_340093.1| 2607
Run Code Online (Sandbox Code Playgroud)
编辑
您也可以为浮点数和负数添加 -g 标志,以防您的文件中有任何标志。命令看起来像,
sort -k3ng,3 filename | tail -5 | cut -d " " -f1,6-7
Run Code Online (Sandbox Code Playgroud)