出力の2つの特定の内容を把握することは可能ですか?

出力の2つの特定の内容を把握することは可能ですか?

実行中の急流のリストを表示するためにTransmission-remoteを使用しています。

transmission-remote -l次の結果を使用する場合:

ID  Done    Have  ETA     Up    Down  Ratio Status Name

1   100%    10GB  Done    0.0   0.0   0.0   Idle   Torrent

Sum: 15.91 GB    0.0     0.0

急流の割合と名前がわかりますか?

現在私は以下を持っています: transmission-remote -l | grep -o -P '.{0,3}%'

が返されます100%

答え1

grepでこれを行う方法はわかりませんが、簡単な解決策がありますawk

リストの最初の急流でのみ機能します。

transmission-remote -l | awk '{if (NR == 3) {print $2, $9}} '

すべてのシードについて(各シードの前に空白行がある場合はtrueでない場合はi += 2置き換えますi++):

transmission-remote -l | awk '{lines[NR]=$2 " " $9} END {for (i = 3; i < NR; i += 2) print lines[i]} '

2番目のケースでは、行を配列に入れ、入力を読み取るときにforループを使用して印刷します。

答え2

head -n 3 | tail -n 1 | 
sed -re 's/[[:blank:]]+/\t/g' | 
cut -f 2,9

これは次のことを行います。

  • 3つのレコード(行)を選択
  • スペースを単一のタブに変換する(前処理を切り取る)
  • フィールド2と9を選択してください。

cutそれ自体は十分に強力ではないので、頭と尾を使ってスレッド(特別なものではないようですgrep)を選択し、sed準備を前処理する簡単な方法を使用しますcut

関連情報