• ベストアンサー

makedbm

awk 'BEGIN { FS=":"; OFS="\t"; } \ /^[a-zA-Z0-9_}/ { print $1, $0 }' /etc/passwd | \ /ussr/etc/yp/makedbm - $YPDBDIR/'domainname'/passwd.byname $YPDBDIRはNISのデータベースディレクトリ これは/etc/passwdからpasswd.bynameマップを作るときのmakedbmの実行の仕方なんでsyがm awkコマンドがどういう動作をしているのかが、いまいち理解できないでおります。 入力フィールドの区切りを":",出力の区切りをスペースにしているんだと思いますが、 $1,$0は何を表しているのでしょうか。/^[a-zA-Z0-9_}/ は行頭が英数であるものを探しているんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

awkの基本機能は、「ある行がパターンにマッチしたときに、指定されたアクションをその行に対して実行する」と言えます。 ご質問の場合、パターンとは、 /^[a-zA-Z0-9_]/ で、おっしゃる通り行頭が英数(とアンダースコア)であるものです。 その後の{ print $1, $0 }がアクションになります。 この場合は$1と$0を出力せよということ。 $0は、処理中の行全体 $1,$2,,,はFSで区切られたフィールドの1番目、2番目、、、となります。 ですので、もし/etc/passwdに root:x:0:0:/root:/bin/bash という行があれば、このawkの出力は root root:x:0:0:/root:/bin/bash となります。 ちなみに、出力の区切りはスペースではなくタブです。

msndance
質問者

お礼

$0は行全体だったんですね。 awkが出るといつもつまずいてしまいます。 ありがとうございました。

関連するQ&A