如何在列中显示文本而忽略其中一个分隔符?

时间:2014-03-25 20:54:24

标签: bash printf echo

此代码用于在列中显示str1的内容:

str1='Name: Robert Jhonson  21
Name: Flex Maxed 23
Name: Thisisaverylongname         andlongsurname 44'

IFS=$'\n'

echo "$str1" | column -t

返回:

Name:  Robert               Jhonson         21
Name:  Flex                 Maxed           23
Name:  Thisisaverylongname  andlongsurname  44

但我想要做的就是不要在另一栏中分开姓氏。 这是所需的输出:

Name:  Robert Jhonson                      21
Name:  Flex Maxed                          23
Name:  Thisisaverylongname andlongsurname  44

你有任何想法吗?你能举个例子吗?

2 个答案:

答案 0 :(得分:2)

使用awk:

echo "$str1"|awk '{print $1, $2 " " $3, $4}' OFS='\t'
Name:   Robert Jhonson  21
Name:   Flex Maxed      23

编辑:根据已修改的问题:

echo "$str1"|awk '{print $1, $2 " " $3, $4}' OFS='\t' | column -ts$'\t'
Name:  Robert Jhonson                      21
Name:  Flex Maxed                          23
Name:  Thisisaverylongname andlongsurname  44

答案 1 :(得分:1)

这是bash中的一种方式:

$ while read -r title fname lname age; do      
    echo "$title|$fname $lname|$age"
done <<< "$str1" | column -s'|' -t
Name:  Robert Jhonson                      21
Name:  Flex Maxed                          23
Name:  Thisisaverylongname andlongsurname  44

在阅读时,您会使用column的新分隔符来回显该标记。使用-s column选项指定新的分隔符。