awk for ループファイルがディレクトリにある

awk for ループファイルがディレクトリにある

awkコマンドを使用してディレクトリ内の各ファイルをどのように繰り返すのですか?

awk -F: 'FNR==NR{a[$1]=$2;next} $2 in a{print $1 FS a[$2]}' email.phone.txt username.email.txt

デフォルトでは、この部分は列を照合して合計して結果を出力する部分です。

例は>

email.phone.txt - 以下を含みます。

[email protected]:phoneexample

ユーザー名.email.txt - 含める:

user1:[email protected]
user131:[email protected]

期待される出力 - 次のようにする必要があります。

user1:phoneexample
user131:phoneexample

しかし、これは1つのテキストファイルでのみ機能します。

email.phone.txt

ただし、サブディレクトリに同じ内容を持つ複数のファイルがあります。たとえば、次のようになります。

../lists/
email.phone1.txt
email.phone2.txt
email.phone3.txt
....

各ファイルを個別にawkするのは非常に時間がかかります。ディレクトリ内の各ファイルに対してforループを使用して例を出力できますか? >

result1.txt
result2.txt
result3.txt
...

ベストアンサー1

各ファイルに対してawkスクリプトを実行しますかemail.phone*.txtusername.email.txtこのようなことをする必要があります。出力ファイル名の尾は1.txt入力ファイル名から取得されます。

for f in email.phone*.txt; do
    out="result${f#email.phone}"       # remove leading 'email.phone'
    awk -F: 'FNR==NR{a[$1]=$2;next} $2 in a{print $1 FS a[$2]}' \
        "$f" username.email.txt > "$out"
done

おすすめ記事