【问题标题】:How to display text file in columns using bashscript in unix?如何在 unix 中使用 bash 脚本在列中显示文本文件?
【发布时间】:2014-10-16 03:57:49
【问题描述】:

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

我该怎么做?我以后如何对其进行排序?

【问题讨论】:

    标签: bash unix multiple-columns


    【解决方案1】:

    改变

    echo "$name, $email, $phone" >> contacts.txt ;;
    

    echo "$name,$email,$phone" >> contacts.txt ;;
    

    试试这个:

    (echo Name,Email,Phone; cat contacts.txt) | column -s , -t
    

    【讨论】:

      【解决方案2】:
      $ 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 隐式循环遍历文件中的每一行。对于每一行,我们根据格式声明打印出前三个字段。

      【讨论】:

      • 它解决了你的问题吗,@Bob?由于您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何疑问,请参阅Help Center > Asking
      • 这个解决方案出现语法错误 3} awk: cmd. line:1: ^ 反斜杠不是最后一个字符
      • @cryptoparty 我刚刚再次尝试了代码,它对我来说运行良好。您能否验证您是否在答案中复制并粘贴了确切的命令?如果仍然出现错误,请告诉我您使用的是哪个操作系统、哪个 shell 以及哪个版本的 awk。
      猜你喜欢
      • 2012-10-22
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2012-07-02
      • 2013-04-30
      相关资源
      最近更新 更多