Grep

cut 命令似乎在管道中不起作用

  • June 8, 2020

我可以通過以下方式過濾掉卡在我們的排隊系統中的工作:

> 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。我錯過了什麼?

每個空格都計入欄位編號,甚至包括前導和連續的。因此,您需要使用-f9而不是-f2. 或者,您可以awk '{ print $2 }'完全使用 cut 命令代替。

如果輸出的間距是一致的

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 使用斜杠和破折號作為欄位分隔符,然後列印第三列。

引用自:https://unix.stackexchange.com/questions/559236