cut 命令似乎不适用于管道

cut 命令似乎不适用于管道

我可以通过以下方式过滤掉在我们的排队系统中陷入困境的工作:

> qjobs | grep "racon" 
       5240703 racon-3/utg001564l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :03   
       5241418 racon-3/utg002276l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :02   
       5241902 racon-3/utg002759l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :03   
       5242060 racon-3/utg002919l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :04   
       5242273 racon-3/utg003133l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :03   
       5242412 racon-3/utg003270l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :04   
       5242466 racon-3/utg003325l-racon-3.fasta  H   1     1   0     10.0   0.0    150   :03   

但是,qjobs | grep "racon" | cut -d " " -f2没有返回例如racon-3/utg003325l-racon-3.fasta。我错过了什么?

答案1

每个空格都会计入字段编号,甚至是前导空格和连续空格。因此,您需要使用-f9而不是-f2.或者,您可以awk '{ print $2 }'完全代替 cut 命令。

答案2

如果输出的间距一致

qjobs | grep "racon" | cut -c 16-47

会产生类似的输出

racon-3/utg002276l-racon-3.fasta

如果您想要第一列,它看起来像 PID 或其他标识符,那么:

qjobs | grep "racon" | awk ' { print $1 } '

如果您正在寻找utg002276l 看起来像用户名的部分:

qjobs | grep "racon" | awk -F'[/-]' ' { print $3 } '

这使得 awk 使用斜杠和破折号字符作为字段分隔符,然后打印第三列。

答案3

您可以将所有空格压缩为一个:

qjobs | grep "racon" | tr -s ' ' | cut -d " " -f3

相关内容