Linux
將兩個管道命令合併為一個命令
我有這兩個程式碼,我想將它們合併/組合成一個:
rostopic echo /cmd_vel | grep -A 3 angular | grep -v x | grep -v y | cut -d : -f 2 rostopic echo /cmd_vel | grep -A 1 linear | grep -v linear | cut -d : -f 2
怎麼做?
rostopic echo /cmd_vel | awk -F: ' /angular/ { m = "z" ; next}; # we want z from angular /linear/ { m = "x" ; next}; # and x from linear { gsub(/ /,"",$1); # strip spaces from $1 if ($1 == m) { gsub(/ /,"",$2); # strip spaces from $2 print $2; m = "" # reset m so it doesnt match anything } }'
這假設 的輸出與使用 rostopic echo
rostopic echo /cmd_vel
中描述的相同,例如:linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
帶有該輸入的 awk 腳本的輸出將是:
2.0 0.0
即“linear”之後第一行的第二個欄位,以及“angular”之後不包含x或y(即必須是z)的行的第二個欄位。
這是同一腳本的稍微簡單的版本。通過將欄位分隔符設置為“一個或多個空格字元可選地以冒號字元開頭”(帶有
-F':?[[:space:]]+'
)並考慮到此更改將影響欄位的編號,我們不需要使用gsub()
:rostopic echo /cmd_vel | awk -F':?[[:space:]]+' ' /angular/ { m = "z" ; next}; /linear/ { m = "x" ; next}; $2 && $2 == m { print $3 ; m = ""}'