我正在尝试在 Unix 中创建一个具有固定列长度的文件。该文件包含俄语西里尔字符,这些字符的解释与正常的 1 字节字符不同。
我正在使用下面的脚本来修改文件(列分隔符是@-@,行分隔符是\r\n):
input_file=$1
output_file=$2
awk -F '@-@' '{printf("%-200s%-200s%-200s%-200s%-200s%-200s%-200s%-200s\r\n", $1, $2, $3, $4, $5, $6, $7, $8)}' $input_file > $output_file
对于具有普通字符的列,输出文件正确包含 200 个字符的列,但对于具有 30 个西里尔字符的列,输出列仅包含 170 个字符。这样,文件中的行将不会具有相同的长度,因为西里尔字符占用 2 个字节,并且代码将解释字节而不是字符。
示例:НИКОЛАЕВНА 有 10 个字符,但脚本将其计算为 20 个,因为它占用 20 个字节。
一个输入文件示例:
НИКОЛАЕВНА@-@russ@-@12345@-@asklle@-@НИКОЛАЕВНА@-@454@-@111@-@asdfg
您能否建议一种创建填充以使所有行具有相同字符数的方法?
谢谢你!