
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*.txt
?username.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