我有一个包含一行或多行的文件夹多个txt文件。每个文件名都是一个电子邮件地址,其中包含不同的电子邮件地址。
例如,我的文件夹中有3个文件:
每个文件的内容:
cat distribution-list1@example.com.txt
john@example.com
aurel@example.com
cat distribution-list2@example.com.txt
doe@example.com
cat distribution-list3@example.com.txt
jack@example.com
gilbert@example.com
jane@example.com
我想只构建一个包含这些数据的文件:
distribution-list1@example.com;john@example.com
distribution-list1@example.com;aurel@example.com
distribution-list2@example.com;doe@example.com
distribution-list3@example.com;jack@example.com
distribution-list3@example.com;gilbert@example.com
distribution-list3@example.com;jane@example.com
答案 0 :(得分:3)
<强> lists_merge.sh 强>
#!/usr/bin/env bash
shopt -s nullglob;
for fname in *.txt;
do
while read line;
do
printf "%s;%s\n" "$fname" "$line";
done <"$fname";
done;
<强>输出强>
$ ./lists_merge.sh
distribution-list1@example.com.txt;john@example.com
distribution-list1@example.com.txt;aurel@example.com
distribution-list2@example.com.txt;doe@example.com
distribution-list3@example.com.txt;jack@example.com
distribution-list3@example.com.txt;gilbert@example.com
distribution-list3@example.com.txt;jane@example.com
注意:假定脚本与通讯组列表文本位于同一目录中 文件。假设此目录中没有其他文本文件
<强>参考强>
<强> nullglob info 强>
答案 1 :(得分:1)
您可以使用sed
:
for emailfile in *.txt; do
email=${emailfile%.txt}
sed "s:^:$email;:" "$emailfile"
done
如果电子邮件ID有冒号(:
),则会失败,但我怀疑你有这样的例子。