Bash 在unix环境中,如何填充超过1024个字符的文件?
我有一个文件,我需要在每一行中填充空格,以使Bash 在unix环境中,如何填充超过1024个字符的文件?,bash,unix,awk,sh,sunos,Bash,Unix,Awk,Sh,Sunos,我有一个文件,我需要在每一行中填充空格,以使bash脚本中的字符数达到1100个左右。文件中的每行当前有900个字符 实现这一点的自然方法是 awk -F, '{printf("%-1100s\n",$0)}' src.txt > dst.txt 然而,我得到一个错误告诉我 awk: formatted string too long record number 1 在互联网上进行了一些实验和搜索之后,我确定格式化字符串awk可以处理的最大行长度是1024 有没有更好的方法来绕过这
bash
脚本中的字符数达到1100个左右。文件中的每行当前有900个字符
实现这一点的自然方法是
awk -F, '{printf("%-1100s\n",$0)}' src.txt > dst.txt
然而,我得到一个错误告诉我
awk: formatted string too long
record number 1
在互联网上进行了一些实验和搜索之后,我确定格式化字符串awk
可以处理的最大行长度是1024
有没有更好的方法来绕过这个限制
(注意:我在SunOS5.10上运行,无法向其中添加GNU工具等)获取GNUawk
$ 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;
#/usr/bin/perl
打开(输入,“您可以尝试:
awk '{ pad=1100-length($0); x = $0;
while (pad > 0) { x = x " "; pad--}; print x }' src.txt >dst.txt
…它完全避免了使用printf()
,而是执行多个字符串连接。我还提出了另一个解决方案:
awk -F, '{printf("%-900s\n",$0)}' src.txt > tmp1.txt
awk -F, '{printf("%200s\n","")}' src.txt > tmp2.txt
paste -d "\0" tmp1.txt tmp2.txt > dst.txt
这将生成与相同的文件
nawk -F, '{printf("%-1100s\n",$0)}' src.txt > dst.txt
即使在读取行时使用BSD awkTry我也无法复制它;do printf“%1100s\n”$line;donedst.txt
n.b.,更改为左对齐并在右侧填充为什么不直接获取行的长度$l
,然后添加($length-$l)x““
?是的,我认为你可以做到这一点-它也应该更快。我看到你添加了一个便条,上面写着“我在SunOS 5.10上运行”。那么你为什么要在linux上标记你的问题呢???你可能在Solaris上使用旧的、坏的awk-使用nawk或/usr/xpg4/bin/awk。linux->SunOS-更正,我的错。nawk
答案是:nawk-F,{printf(%1100s\n“,$0)}'src.txt>dst.txt更像绝望-10 Q