在 Linux 中将定界文件转换为固定宽度
Convert delimited file to fixed width in Linux
使用 bash 可用的工具,如何转换分隔数据
foo|bbbaaarrr|bazz
固定宽度数据
foo bbbaaarrrbazz EOL
我尝试使用列作为文档暗示我可以定义列宽,但没有用。
我确信使用 sed 或 awk 很简单,但我对它们不熟悉。
以下应该适合您:
column -t -s '|' input_file_here
它将输入文件转换为table格式。输入记录分隔符由 -s
指定。如果您想要在字段中填充 space 以外的内容,请使用 -o
设置输出分隔符。输出分隔符默认为两个 space,因此输出中每列之间将有两个 space。
示例:
$ cat input
hello|world|testing
a|b|c
another|test|line
$ column -t -s '|' input
hello world testing
a b c
another test line
http://man7.org/linux/man-pages/man1/column.1.html
编辑:
如果您需要每个字段都是固定长度,您可以使用 awk
。您需要为您的文件设置输入分隔符,但像这样应该可以工作:
$ awk -F '|' '{ for (i=1; i<=NF; i++) { printf("%-10s", $i); } print ""; }' input
hello world testing
a b c
another test line
只需更改 printf
语句中指定的字段宽度。
使用 bash 可用的工具,如何转换分隔数据
foo|bbbaaarrr|bazz
固定宽度数据
foo bbbaaarrrbazz EOL
我尝试使用列作为文档暗示我可以定义列宽,但没有用。 我确信使用 sed 或 awk 很简单,但我对它们不熟悉。
以下应该适合您:
column -t -s '|' input_file_here
它将输入文件转换为table格式。输入记录分隔符由 -s
指定。如果您想要在字段中填充 space 以外的内容,请使用 -o
设置输出分隔符。输出分隔符默认为两个 space,因此输出中每列之间将有两个 space。
示例:
$ cat input
hello|world|testing
a|b|c
another|test|line
$ column -t -s '|' input
hello world testing
a b c
another test line
http://man7.org/linux/man-pages/man1/column.1.html
编辑:
如果您需要每个字段都是固定长度,您可以使用 awk
。您需要为您的文件设置输入分隔符,但像这样应该可以工作:
$ awk -F '|' '{ for (i=1; i<=NF; i++) { printf("%-10s", $i); } print ""; }' input
hello world testing
a b c
another test line
只需更改 printf
语句中指定的字段宽度。