AWKフィルタの結果にBASH変数を使用する方法

AWKフィルタの結果にBASH変数を使用する方法

ディレクトリ名の最初の文字を取得するスクリプトがあり、同じ文字で始まるディレクトリ名を取得してテキストファイルに書きたくありません。 forループは、.txtファイルのディレクトリ名のリストを繰り返します。

        for dirName in `cat $1 | tr ' ' '_' | awk '/ova/ && !/Nova/' `
        do
                firstLetter=$(echo $dirName | head -c 1)

                mkdir "/opt/SOS/$dirName"
                awk '{ print length(), $0 | "sort -n" }' $1 | cut -f 2- -d ' ' | awk -v var="$firstLetter" '$1 ~ /^ *var/' >> "/opt/SOS/$dirName/seznam-obci-stejne-pismeno.txt"

使用中です ご協力ありがとうございますLinux version 4.19.0-13-amd64 ([email protected]) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.160-2 (2020-11-28)

ベストアンサー1

Awkは内部的に変数を挿入しません/.../。これはリテラルテキストです。

次のいずれかを選択します。

awk -v letter="$firstLetter" '$1 ~ "^" letter'
awk -v letter="$firstLetter" 'index($1, letter) == 1'
awk -v letter="$firstLetter" 'substr($1, 1, 1) == letter'

デフォルトのフィールド区切り文字のため、awk のフィールドはスペースで始まらない。

おすすめ記事