如何在unix中使用bash脚本在列中显示文本文件?

时间:2014-10-16 03:57:50

标签: bash unix multiple-columns

我正在制作一个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

我该怎么做?我以后如何能够对它进行排序?

2 个答案:

答案 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