このサンプルの最後の列を取得したいと思います。
[ 3] 1.0- 2.0 sec 1.00 MBytes 8.39 Mbits/sec
[ 3] 2.0- 3.0 sec 768 KBytes 6.29 Mbits/sec
[ 3] 3.0- 4.0 sec 512 KBytes 4.19 Mbits/sec
[ 3] 4.0- 5.0 sec 256 KBytes 2.10 Mbits/sec
...
私が使うなら
cut -d\ -f 13
私は得る
Mbits/sec
6.29
4.19
2.10
その間に時々追加のスペースがあるからです。
tr
コマンドとsqueezeオプション(-s
フラグ)を使用して、連続するすべてのスペースをすべて1つのスペースに変換し、スペースを区切り文字としてcut
操作を実行します。数値を含む必要な列にアクセスできます。
以下のコードを参照してください:
cat file | tr -s ' ' | cut -d ' ' -f 8
文字通りあなたの質問に答えるには:
sed 's/ */:/g' | cut -d : -f 5
または
awk -F ' +' '{print $5}'
かっこ内の数値が10に達した場合などは機能しません。数値のみに関心がある場合は、他のすべてを削除できます。
sed 's/[^.0-9][^.0-9]*/:/g' | cut -d : -f 6
これらのコマンドはすべて、スペースで区切られたファイルの最後の列を印刷します。
awk '{print $NF}' file
awk
では、NF
はフィールドの数であり、$NF
は最後のフィールドです。
Perl -lane 'print $F[$#F]' file
-a
は、空白のファイルを配列@F
に分割します。$#F
は配列の要素数なので、$F[$#F]
は最後の要素です。 -n
は、コマンドラインで指定されたファイルを読み取り、-e
で渡されたスクリプトを各行に適用することを意味します。 -l
は、各print
ステートメントに改行文字(\n
)を追加するだけです。
sed 's/.* //g'
すべてを最後のスペースに一致させて削除し、最後の列のみを残す単純な正規表現。
rev file | cut -d' ' -f 1 | rev
rev
は出力を逆にします。つまり、最後のフィールドが最初になり、cut
は区切り文字スペースで表示され、rev
はテキストを元に戻します。 連続する空白がある場合、これは機能しません。
あなたの入力に基づいて、私はあなたが実際に最後の列を望んでいるのではなく、最後から2番目の列または最後の2つを望んでいると思います。その場合、これらを使用して最後の2(8.39 Mbits/sec
)を印刷します。
awk '{print $(NF-1),$NF}' file
Perl -lane 'print "$F[$#F-1] $F[$#F]"' file
sed 's/.* \(.* .*\)/\1/' file
rev file | cut -d' ' -f 1,2 | rev
そして、これらは最後から2番目(8.39
)を印刷します:
awk '{print $(NF-1)}' file
Perl -lane 'print $F[$#F-1]' file
sed 's/.* \(.*\) .*/\1/' file
rev file | cut -d' ' -f 2 | rev
マニュアルに従って、cut
を使用して空白の複数の出現を分離することはできません。
出力フィールドは、フィールド区切り文字の単一の出現によって分離されます。
テキストが同じ量で区切られている場合、またはtr
を使用して余分なテキストを削除する場合を除きます。
それ以外の場合は、awk
、sed
、ex
などの代替ツールを使用します。
例えば:
ex -s +'%norm $2Bd0' +%p +q! foo.txt
置換+q!
と-cwq
変更をインプレースで保存します。
次のようなPerlワンライナーを使用します。
Perl -lane 'print $F[-2]' input_file
説明:
オプション-e
を指定すると、Perlインタープリターはファイルではなくインラインでスクリプトを検索します。
オプション-n
を指定すると、入力(パイプからのファイルまたはSTDIN)が1行ずつ読み取られます。
オプション-l
は、行を読み取った後、入力レコードセパレーター(デフォルトではOS依存、UNIXでは改行)を取り除き、すべてのprint
の末尾に追加します
オプション-a
を使用すると、各入力行が空白で配列@F
に分割されます。$F[-2]
は最後から数えて2番目の要素であり、これは必要なフィールドです。 $F[$#F-1]
を使用することもできます。ここで、$#F
は配列@F
の最後のインデックスで、読みにくくなります。