プロが教えるわが家の防犯対策術!

シェルスクリプトを始めたばかりでawkは基本の基本しか分かりません。
人の作ったシェルスクリプトを読んでいて分からない部分を教えてください。
全体的にわからないのですが、
特に以下の $0から始まる行の読み方が、どの分野を調べたらよいのか見当もつかないので。

Func(){
local inputfile=$1
gawk --posix -v part=$[{part} '

BEGIN{
A = 0
B = 0
}

$0 ~ /^ [0-9]{3} / && $0 !~ part {
..
_}

END{
print A,B
}
' $inputfile
}

A 回答 (3件)

awkのスクリプトの中の事なので、


> awkは基本の
の範囲内です。
~ は正規表現でマッチする言う演算子で、!~ は正規表現でマッチしないという演算子です。= と != はわかりますよね?その正規表現版です。

$0 ~ /^ [0-9]{3} / && $0 !~ part
は、
$0 が /^ [0-9]{3} / にマッチして、かつ、 part にマッチしない場合
という意味です。
    • good
    • 0
この回答へのお礼

ありがとうございます。全然わかっていなかったです。昨日本屋に行きましたが、awk自体どの本を読めば、という状態でしたが、糸口になる回答で助かりました。!~が!=とは、全く想像もつきませんでした。

お礼日時:2022/08/19 10:11

$0 ~ /^ [0-9]{3} / && $0 !~ part {



のどこがわかっていて、どこがわからないのでしょうか?

http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_5.html
等を参照のこと。

○ awkの基本文法等は大丈夫ですか?
・「 条件 {条件が真だったら実行するコマンド等} 」という書式になっている。
・ && は 論理積(and)、等

○ awkのスクリプト内では、awkの正規表現を使います。

○ 変数等 ~ 正規表現 は 「変数等」が正規表現にマッチするなら真
○ 変数等 !~ 正規表現 は 「変数等」が正規表現にマッチしなければ真

○正規表現には /正規表現/ の形でスラッシュで囲んだ 「正規表現定数」 と、変数等の式を使った「動的正規表現」がある。

○ $0 ~ /^ [0-9]{3} / は正規表現定数を使ったもの。
正規表現定数の中では、空白は「空白文字にマッチする」パターンとして有効なので注意する。
上記が「先頭から空白文字,3桁の数字,空白文字」というパターンなのか、空白文字が不要なのかは元のスクリプトをよく確認する。

○ $0 !~ part は動的正規表現を使ったもの
このシュルスクリプトの場合、awkの変数part は、awkのスクリプト中ではなく、gawkコマンドの-vオプションで part=$[{part} と指定されている。
この部分はシェルスクリプトとして解釈しなければなないのだが、$[{part} という書き方がなんかおかしいので確認すること。
    • good
    • 1
この回答へのお礼

ありがとうございます。
どこがわからないかというと、どこがひとまとまりとして読むのかわからず、調べ方もわからなかったのですが、
スラッシュに囲まれたところが正規表現とのこと。それを念頭に、もう一度解答を読んで理解したいと思います。

お礼日時:2022/08/19 09:25

私も詳しくないのですが、『Linux 正規表現』でweb検索すると沢山出てくるので参考になると思います。

    • good
    • 0
この回答へのお礼

awkでなくて、正規表現なのでしょうか?今外出先で、スマホから少し検索してみました。
制御文字とリテラル文字、とかでしょうかね。帰宅したらまた調べてみます。

お礼日時:2022/08/18 17:20

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