我有一个包含以下内容的文件:
Q先生 01629699998
Nhung女士 011287633
...
我想使用此awk '{print "BEGIN:VCARD";print "Name:"$0;print "TELEPHONE:"$0;print "END:VCARD"}' file
来创建此结果
开始:VCARD
姓名:Q先生 联系电话:01629699998
END:VCARD
BEGIN:VCARD
姓名:Nhung女士 电话:011287633
END:VCARD
...
但是上面的代码没有得到,任何人都可以帮助我,谢谢
答案 0 :(得分:2)
尝试:
$ awk '{if (NR%2) printf "BEGIN:VCARD\nName: %s\n",$0; else printf "TELEPHONE:%s\nEND:VCARD\n",$0}' inputfile
BEGIN:VCARD
Name: Mr Q
TELEPHONE:01629699998
END:VCARD
BEGIN:VCARD
Name: Ms Nhung
TELEPHONE:011287633
END:VCARD
您的输入文件由成对的行组成。第一行有一个名字,第二行有一个电话号码。因此,我们想在奇数行(名称)和偶数行(电话)上做一些不同的事情。
if (NR%2)
这将开始if
语句,其中的测试基于模数为2的行号。
printf "BEGIN:VCARD\nName: %s\n",$0
这是对奇数行执行的命令。
else printf "TELEPHONE:%s\nEND:VCARD\n",$0
这是对偶数行执行的操作。
答案 1 :(得分:0)
这是使用printf
的纯粹bash选项:
$ cat list_file # I have added one more entry for explanation.
Mr Q
01629699998
Ms Nhung
011287633
Dr. Drake Ramoray
0123456789
$ OLDIFS="$IFS" # save old IFS
$ IFS=$'\n' # Set IFS to newline, because the entries are newline separated.
$ printf 'BEGIN:VCARD\nName: %s\nTELEPHONE:%s\nEND:VCARD\n' $(<list_file)
BEGIN:VCARD
Name: Mr Q
TELEPHONE:01629699998
END:VCARD
BEGIN:VCARD
Name: Ms Nhung
TELEPHONE:011287633
END:VCARD
BEGIN:VCARD
Name: Dr. Drake Ramoray
TELEPHONE:0123456789
END:VCARD
$ IFS="$OLDIFS" # restore old IFS
说明:
IFS
)。 %s
个条目。因此,它将6个参数分为3组2个参数。