如何在Unix中的每行末尾添加100个空格

时间:2016-12-06 15:44:48

标签: shell unix awk

我有一个文件,每行应该包含200个字符。我收到了一个源文件,每行只有100个字符。我现在需要为每一行添加100个额外的空格。如果空格很少,我们可以使用sed,如:

 sed 's/$/     /' filename > newfilename

由于它是100个空格,任何人都可以告诉我是否可以在Unix中添加?

7 个答案:

答案 0 :(得分:4)

如果你想要每行固定n个字符(不要相信输入文件每行有精确的字符),请按照以下步骤操作。对于每行具有不同字符数的输入文件:

$ cat file
1
12
123
1234
12345

每行扩展到10个字符。

$ awk '{printf "%-10s\n", $0}' file | cat -e

1         $
12        $
123       $
1234      $
12345     $

显然在脚本中更改10到200。这里$显示行尾,但它不是一个字符。您不需要cat -e,这里只是为了显示该行已延长。

答案 1 :(得分:3)

在Glenn的建议后更新

格伦在评论中建议的方式,替换是不必要的,你可以添加空格 - 虽然,进一步采用这种逻辑,你甚至不需要添加,你可以say他们在原始行之后。

perl -nlE 'say $_," "x100' file

原始答案

使用Perl:

perl -pe 's/$/" " x 100/e' file

那说...... "用每100行重复的计算表达式(s)替换每行($)的末尾(e)空间"

如果你想将所有行填充到200个字符,即使输入文件是不规则的(所有不同长度的行),你可以使用这样的东西:

perl -pe '$pad=200-length;s/$/" " x $pad/e'

这将构成83,102和197个字符的行,每行200个。

答案 2 :(得分:3)

使用awk

awk '{printf "%s%100s\n", $0, ""}' file.dat

$0指的是整行。

答案 3 :(得分:2)

以防您正在寻找bash解决方案,

while IFS=  read -r line
    do
    printf "%s%100s\n" "$line" 
done < file > newfile

<强>测试

假设我有一个包含3行的文件

$ wc -c file
      16 file
$ wc -c newfile
     316 newfile

原始答案

spaces=$(echo {1..101} | tr -d 0-9)
while read line
    do
    echo -e "${line}${spaces}\n" >> newfile
done < file

答案 4 :(得分:1)

您可以在printf中使用awk

awk '{printf "%s%*.s\n", $0, 100, " "}' filename > newfile

printf将在每个换行符的末尾附加100个空格。

答案 5 :(得分:1)

GNU awk使用string-manipulation function sprintf.

的另一种方式
awk 'BEGIN{s=sprintf("%-100s", "");}{print $0 s}' input-file > file-with-spaces

带有示例的证明: -

$ cat input-file
1234jjj hdhyvb 1234jjj
6789mmm mddyss skjhude
khora77 koemm  sado666
nn1004  nn1004 457fffy
$ wc -c input-file
      92 input-file
$ awk 'BEGIN{s=sprintf("%-100s", "");}{print $0 s}' input-file > file-with-spaces
$ wc -c file-with-spaces
      492 file-with-spaces

答案 6 :(得分:1)

如果你使用Bash,你仍然可以使用sed,但是使用一些readline功能可以防止你手动输入100个空格(参见manual for "Readline arguments")。

您开始正常输入:

sed 's/$/

现在,您要插入100个空格。您可以通过在空格键前面加上一个readline参数来指示您希望它发生100次,即手动输入看起来像这样的readline键绑定来执行此操作:

M-1 0 0 \040

或者,如果您的元键是alt键: Alt + 1 0 0 空间

这会插入100个空格,你得到

sed 's/$/                                                                                                    /' filename
输入命令的其余部分后

这对于在交互式shell中工作很有用,但对于脚本来说不是很漂亮 - 使用任何其他解决方案。

相关问题