awkだけを使用するようにこのコマンドを単純化するにはどうすればよいですか?

awkだけを使用するようにこのコマンドを単純化するにはどうすればよいですか?
awk '/user/ {print $1 }' /etc/userdomains | sed 's/://'

/etc/userdomains の形式は次のとおりです。

domain.tld: user
otherdomain.tld: otheruser

答え1

最も簡単な方法は、フィールド区切り文字を「:」に設定することです。

awk -F":" '$2~/user/{print $1}' /etc/userdomains

And if you want to check for exact username, 

awk -F"[ \t]*:[ \t]*" '$2=="user"{print $1}' /etc/userdomains

答え2

awkin(デフォルトでは)sub(regexp, replacement, target)が最初に現れるものを見つけて(in-place)に置き換える関数があります。regexptarget$0replacement

awk '/user/ {sub(/:/, ""); print $1}' /etc/userdomains

答え3

gsubinを使用して、文字列内のすべてのsをawk削除できます。:

awk '/user/ {gsub(":", ""); print $1}' /etc/userdomains

答え4

代わりにsedを使用できますtr

awk '/user/ {print $1 }' /etc/userdomains | tr -d ":"

これは単にawkを使用するよりも何の利点もないと思いますが(Sedにも問題がないと思います)。

関連情報