1

awkが私の問題の解決策になると思います。私のツールは、ESXi4.0u1でbusyboxを使用しているb/cに制限されています。VMバックアッププログラム(ghettoVCB)のログファイルがあります。このファイルをスキャンして式を探す必要があります

「ディスクのクローン作成に失敗しました:選択した操作のための十分なスペースがファイルシステムにありません」

私のファイルでは、これは「43」行目あたりです。前のフィールド(AWK vocab)はprint、出力テキストファイルに追加するVM名を表します。私の例では、VM名はTEST12-RH4-AtlassianTestです。

awk 'RS=""
/There is not enough space/ { 
print $17
} '

print $17はハードコーディングされており、これは必要ありません。上記の正規表現によって返される行の最初のフィールドより1つ少ないフィールドを見つけたいと思います。任意の提案をいただければ幸いです。 [Awk入力ファイル]

4

2 に答える 2

1

更新(最適化バージョン)

awk 'NR==1{print $NF}' RS="Failed to clone" input-awk.txt

コンセプトの証明

$ awk 'NR==1{print $NF}' RS="Failed to clone" input-awk.txt
TEST12-RH4-AtlassianTest

アップデート2(Uber最適化バージョン)

技術的には、以下は最適化バージョンですが、サンプル入力では機能しますが、レコード区切り文字で誤ったヒットが発生する可能性が高くなります。

awk 'NR<2{print $NF}' RS="Fa" input-awk.txt`

アップデート3(究極のメガキル最適化バージョン)

これは本番コードでは使用しませんが、単純化する方法が常にあることを示しています。誰かがコードゴルフの目的でこれを打ち負かすことができれば、私は確かにそれを見たいです!

awk '!a++,$0=$NF' RS="Fa" input-awk.txt

オリジナル

VM名が常に印刷するレコードの最後のフィールドであるとすると、これは機能します。

awk '/not enough space/{split(pre,a);print a[pNF]}{pre=$0;pNF=NF}' input-awk.txt
于 2011-03-16T02:21:39.473 に答える
0

だからあなたは次のようなものを使うことができませんでした

'{if it matches, print foo; foo=$17}'
于 2011-03-16T02:14:23.493 に答える