我正在制作一个bash脚本联系人列表系统。这就是打印出来的。
=================
Menu
=================
Enter 1 for Insert new contact
Enter 2 for Print current contact list
Enter 3 for Search contact list
Enter 4 for Exit
Enter your selection:
对于“1”,它会询问姓名,电子邮件和电话,并将它们存储为变量,然后将它们存储在文本文件中。
case "$answer" in
1) echo -e "Enter in a new contact name: \c"
read name
echo -e "Enter in new contact email address: \c"
read email
echo -e "Enter in new contact phone number: \c"
read phone
echo "$name, $email, $phone" >> contacts.txt ;;
2是我遇到麻烦的地方。我想在三列中显示文本,以便按名称,电子邮件或电话号码对其进行排序。这是我的案例2的代码。
2) cat contacts.txt ;;
显然它只会吐出来:
Test Name, Test@data.com, 123-123-1234
Blank Data, Data@aol.com, 234-555-5555
我想要阅读:
Name Email Phone
Test Name Test@data.com 123-123-1234
Blank Data Data@aol.com 234-555-5555
我该怎么做?我以后如何能够对它进行排序?
答案 0 :(得分:1)
$ cat contacts.txt
Test Name, Test@data.com, 123-123-1234
Blank Data, Data@aol.com, 234-555-5555
$ awk -F, 'BEGIN{printf "%-12s %-15s %-12s\n","Name"," Email"," Phone"} {printf "%-12s %-15s %-12s\n",$1,$2,$3}' contacts.txt
Name Email Phone
Test Name Test@data.com 123-123-1234
Blank Data Data@aol.com 234-555-5555
工作原理:
printf
语句允许自定义输出格式。使用格式字符串%-12s %-15s %-12s\n
之上。以%-12s
为例,12s
部分意味着我们要将字符串格式化为12列的宽度。减号表示我们希望该字段左对齐。
分别查看awk
代码的每一部分:
-F,
这告诉awk
使用逗号作为每行的字段分隔符。
BEGIN{printf "%-12s %-15s %-12s\n","Name"," Email"," Phone"}
在读取文件的第一行之前执行BEGIN块。它用于打印标题。
printf "%-12s %-15s %-12s\n",$1,$2,$3
awk
隐式循环遍历文件中的每一行。对于每一行,我们按照格式声明打印出前三个字段。
答案 1 :(得分:1)
更改
echo "$name, $email, $phone" >> contacts.txt ;;
到
echo "$name,$email,$phone" >> contacts.txt ;;
试试这个:
(echo Name,Email,Phone; cat contacts.txt) | column -s , -t