Bash脚本生成Vcard

时间:2014-01-18 16:06:06

标签: bash vcard

我的客户中有大约3400个联系人,例如:

+13424xxxx
+1434xxxxx

我想使用bash脚本为每个数字生成一个带有vcard的文件:

BEGIN:VCARD
VERSION:3.0
FN:customer name
N:Name;;;;
TEL;TYPE=CELL:+13242XXXX
END:VCARD

是否可以生成一个包含3400个联系人的vcard文件?

感谢

2 个答案:

答案 0 :(得分:2)

听起来你有一个解决方案 - 我编写了外部帖子 - 这对于使用多个数据点处理Outlook CSV到Vcard非常具体。

当前查询的简单方法

### snip - start of script - remove this line ###
#!/bin/bash
# use a 'here document' to create the Vcard format
## add/remove Vcard fields between the 'EOM' start/end marks
function create_vcard {
cat << EOM
BEGIN:VCARD
VERSION:3.0
FN:customer name
N:Name;;;;
TEL;TYPE=CELL:${CELL_NUMBER}
END:VCARD
EOM
}
###

IN_FILE=$1
## if IN_FILE missing show usage
if [[ "${IN_FILE}" == "" ]] ; then printf "\n\tUsage: $0 Input_file_name\n\n" ; exit 1 ; fi

OUT=${IN_FILE}.vcard
## if OUT already exists then rename
if [[ -e ${OUT} ]] ; then mv ${OUT} ${OUT}.last ; fi

for CELL_NUMBER in $(cat ${IN_FILE})
do
    create_vcard >> ${OUT}
done
ls -l ${OUT}
### snip - end of script ###

如果你有更多数据字段可以使用,那么使用Awk的orignal帖子可能会更好

方法

:)
Dale

答案 1 :(得分:1)

假设您将这些数字存储在名为numbers.txt的文件中,每行一个数字。

然后你可以做(​​纯粹的bash):

cat numbers.txt| while read LINE; do echo -e "BEGIN:VCARD...CEL:$LINE\nEND:VCARD"; done

即,您将每行保存到$ LINE中,将其粘贴到静态文本中。

您可以将其重定向到包含&gt;的文件(截断目标并写入其中)或&gt;&gt; (附加到目标)后跟您要写入的名称。

实际上,你有多个列(不只是数字,还有名称和其他数据)。 纯粹的bash并不擅长,在bash脚本中,人们使用诸如awk之类的辅助工具来解析其中包含这些表的文本文件(另一种语言要学习)。

就我个人而言,我认为您可以更好,更快地调整所提供的csv解决方案,或者使用PHP来推销自己的解决方案。