Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在unix环境中,如何填充超过1024个字符的文件?_Bash_Unix_Awk_Sh_Sunos - Fatal编程技术网

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