アプリ版:「スタンプのみでお礼する」機能のリリースについて

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_}/ は行頭が英数であるものを探しているんでしょうか。

A 回答 (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の出力は

rootroot:x:0:0:/root:/bin/bash

となります。
ちなみに、出力の区切りはスペースではなくタブです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/15 16:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!