2017-03-09 2 views
1

Im AWKを完全に新しくしました。私は、タブ区切りのファイル(以下のばかげた例では$ 1から)のスペースの後ろからすべてを削除しようとしています。あるいは、最初のスペースの前のすべてをつかんで、awkの変数に入れます。だから私は' 0000'($ 1の最初のスペースの後に任意の長さである可能性があり、唯一のルールがあるすべてのもの)を削除し、abcである$ 1を終わるにはどうすればよいawkパターン:フィールド内のスペース(含む)の後ろのすべてを削除してください

abc 0000 12sometext stuff 

のようなラインを持っています。サブ関数はAWKにはありませんが、何とか正規表現を使用できますか?

abcの結果を変数に代入する必要がある場合は、AWKの関数分割の配列を使用するのは不合理なようですが、別の方法はありませんか?

awk -F'\t' '{n = split($1, array, " "); result = array[1]; print result}' file.txt 
+1

WRT 'サブのような機能がAWK'ではない - もちろんのawkは、サブ()関数があります。 Arnold Robbins著、Effective Awk Programming、第4版を入手してください。 –

+0

私は見る!私は 'awk -F '\ t' '{name = gensub(/。+ /、" "、$ 1)に沿って何かを求めていました。 print name} 'file.txt'私は、この関数が戻り値を持つとは認識しません。 – user3375672

+1

数多くの方法があります。 $ 0を 'abc 0000'とすると、' var = substr($ 0,1,3) '、' var = substr($ 0,1、index($ 0、 "")-1) '、' ' $、$、$、$、$、$、$、$、$、$、$、$、$、$、$、$ 1) sub(/。* /、 ""、var) '、' split($ 0、t、/ /); var = t [1] 'など、など.... –

答えて

2

あなたは$1にスペースの後に、すべてを置き換えるためにsubを使用することができます。

awk 'BEGIN{FS=OFS="\t"} {sub(/ .+/, "", $1)} 1' file 

abc 12sometext stuff 
+0

サブステートメントの後に '1'を説明できますか?そして、残りの部分の 'abc'を' short_name = sub(/。+ /、 ""、$ 1) 'という変数に(awkプログラムで何かをするために)割り当てる方法を教えてください。 – user3375672

+1

'1'は' awk'のデフォルトの動作ですので、レコードを出力します。置き換えられた値を変数に代入するには、 'awk 'BEGIN {FS = OFS =" \ t "} {p = $ 1;サブ(/。+ /、 ""、p)} 1 'ファイル' – anubhava

+1

賢い!わかった。 – user3375672

関連する問題