如何在 unix 环境中填充超过 1024 个字符的文件?
How can I pad a file beyond 1024 characters in a unix environment?
我有一个文件,我需要用 bash
脚本中的空格将每一行填充到大约 1100 个字符。当前文件中的每一行有 900 个字符。
自然的方法是
awk -F, '{printf("%-1100s\n",[==])}' src.txt > dst.txt
但是,我收到一条错误消息
awk: formatted string too long
record number 1
经过一些实验和在 Internet 上搜索后,我确定格式化字符串 awk
可以处理的最大行长度为 1024。
有没有更好的方法来绕过这个限制?
(注意:我在SunOS 5.10上运行,无法添加GNU工具等)
获取 GNU awk。
$ awk 'BEGIN{printf "%-1100s\n", "foo"}'
foo
您可能使用的是旧的、损坏的 awk
- 在 Solaris 上使用 nawk
或 /usr/xpg4/bin/awk
。如果其中一个出现此问题,请使用另一个。
如果您在该系统上安装了 perl
(可能是),您可以像这样设置一个脚本,然后 运行 它就像 pad.pl input.txt 1100 > output.txt
。
#! /usr/bin/perl
open (INPUT, "<$ARGV[0]");
$LENGTH=$ARGV[1];
while (<INPUT>) {
chomp($_);
while (length($_) < $LENGTH ) { $_ = $_." "; }
print $_."\n";
}
close INPUT;
你可以试试:
awk '{ pad=1100-length([=10=]); x = [=10=];
while (pad > 0) { x = x " "; pad--}; print x }' src.txt >dst.txt
... 完全避免使用 printf()
而是进行多个字符串连接。
我想到了另一种解决方案:
awk -F, '{printf("%-900s\n",[=10=])}' src.txt > tmp1.txt
awk -F, '{printf("%200s\n","")}' src.txt > tmp2.txt
paste -d "[=10=]" tmp1.txt tmp2.txt > dst.txt
这会生成与
相同的文件
nawk -F, '{printf("%-1100s\n",[=11=])}' src.txt > dst.txt
我有一个文件,我需要用 bash
脚本中的空格将每一行填充到大约 1100 个字符。当前文件中的每一行有 900 个字符。
自然的方法是
awk -F, '{printf("%-1100s\n",[==])}' src.txt > dst.txt
但是,我收到一条错误消息
awk: formatted string too long
record number 1
经过一些实验和在 Internet 上搜索后,我确定格式化字符串 awk
可以处理的最大行长度为 1024。
有没有更好的方法来绕过这个限制?
(注意:我在SunOS 5.10上运行,无法添加GNU工具等)
获取 GNU awk。
$ awk 'BEGIN{printf "%-1100s\n", "foo"}'
foo
您可能使用的是旧的、损坏的 awk
- 在 Solaris 上使用 nawk
或 /usr/xpg4/bin/awk
。如果其中一个出现此问题,请使用另一个。
如果您在该系统上安装了 perl
(可能是),您可以像这样设置一个脚本,然后 运行 它就像 pad.pl input.txt 1100 > output.txt
。
#! /usr/bin/perl
open (INPUT, "<$ARGV[0]");
$LENGTH=$ARGV[1];
while (<INPUT>) {
chomp($_);
while (length($_) < $LENGTH ) { $_ = $_." "; }
print $_."\n";
}
close INPUT;
你可以试试:
awk '{ pad=1100-length([=10=]); x = [=10=];
while (pad > 0) { x = x " "; pad--}; print x }' src.txt >dst.txt
... 完全避免使用 printf()
而是进行多个字符串连接。
我想到了另一种解决方案:
awk -F, '{printf("%-900s\n",[=10=])}' src.txt > tmp1.txt
awk -F, '{printf("%200s\n","")}' src.txt > tmp2.txt
paste -d "[=10=]" tmp1.txt tmp2.txt > dst.txt
这会生成与
相同的文件nawk -F, '{printf("%-1100s\n",[=11=])}' src.txt > dst.txt