我想编写一个脚本来执行以下操作
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
我该怎么做?
答案 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以外的分隔符。