从多个文件构建csv文件

时间:2015-10-20 10:25:38

标签: bash csv

我有一个包含一行或多行的文件夹多个txt文件。每个文件名都是一个电子邮件地址,其中包含不同的电子邮件地址。

例如,我的文件夹中有3个文件:

  • distribution-list1@example.com.txt
  • distribution-list2@example.com.txt
  • distribution-list3@example.com.txt

每个文件的内容:

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

2 个答案:

答案 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有冒号(:),则会失败,但我怀疑你有这样的例子。