2016-12-22 9 views
1

特定の行の特定の列の数値を切り取ろうとしています。私が使用して列を取得するには:gsubでawkの変数の値を変更して表示するには?

executionTime="120" 

しかし、私は数値でちょうど興味:

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print $i}' $file 

を必要に応じて出力されます。私は

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print $i}' $file | awk '{gsub(/[^0-9]/,""); print}') 

または

awk 'BEGIN{sedcmd="sed 's/[^0-9]//g'"} /REGEX1{for(i=1;i<=NF;++i)if($i~/REGEX2/) print $i | sedcmd}' tmpfile 

を使用している場合はそれが動作します。しかし、アクションブロック内でsub()、gsub()またはgensub()を使用しようとするとすぐに失敗します。たとえばで:

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print gsub(/[^0-9]/,"",$i)$i}' $file 

出力は7

私が間違って何をやっているのですか?

gawk -V 
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.1) 
+0

は正直にあなたはそれが複雑になっていると言って、サンプル入力 –

+0

Krischaを提供しています。だから、私たちに知らせてもらうたびに推測するのではなく、同じように助けてくれるように、サンプルのインプットと予想されるアウトプットを投稿してください。 – RavinderSingh13

答えて

0

gsubファンクションは、number of substitutions madeを出力します。そのため、$iにあるすべての数字を削除しても数字が得られます。

あなたが使用する必要があります

if ($i~/REGEX2/) { gsub(/[^0-9]/,"",$i); print $i} 
+0

@エドモートンはい、そうですが、この場合は重要ではありません。 – Jdamian

+0

それが問題を解決しました。どうもありがとう! :-) –

1

あなたが欲しい:

awk '/REGEX1/{ for(i=1;i<=NF;++i) if($i~/REGEX2/){x=$i; gsub(/[^0-9]/,"",x); print x}' 

やgawkは専用:

awk '/REGEX1/{ for(i=1;i<=NF;++i) if($i~/REGEX2/){print gensub(/[^0-9]/,"","g",$i)}' 

は、両方の機能のmanページをご確認ください。 GNUで

0

あなたが変更された文字列を返すことgensubを使用することができawkは:

{ print gensub(/[^0-9]/, "", "g", $i) } 
関連する問題