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

username.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

相关内容