如何使用分隔符打印列

时间:2013-05-09 04:14:13

标签: linux bash shell

我想编写一个脚本来执行以下操作

while not end of file
read line
print columns 1 to o-1 with | as delimiter
print column o
print columns o+1 to n with | as delimiter
end loop

我该怎么做?

2 个答案:

答案 0 :(得分:4)

假设每一行只是一个以空格分隔的字段列表:

o=7   # or whatever o should be
while read -r -a columns; do
( IFS="|"
  printf "${columns[*]:0:o-1}\n"
  printf "${columns[o-1]}\n"
  printf "${columns[*]:o}\n"
)
done

read -a将该行读入名为columns的数组中。我将printf放在子shell中,这样我们就不必担心以后恢复IFS的值了。语法"${array[*]:x:y}"表示创建一个由y array字段组成的字符串,从字段x开始,使用$IFS的第一个字符分隔每个字段在字符串中。

答案 1 :(得分:0)

如果您的字段是制表符分隔符,则以下一行脚本可以打印带有单元格边框的表

sed -e 's/\t/_|/g' table.txt |  column -t -s '_' | awk '1;!(NR%1){print "-----------------------------------------------------------------------";}'

Description            |value                 |Comment
-----------------------------------------------------------------------
Internal               |322                   |
-----------------------------------------------------------------------
External               |42515                 |
-----------------------------------------------------------------------

对于上面的sed命令中的空格更改\ t以外的分隔符。