我有一个文件,每行应该包含200个字符。我收到了一个源文件,每行只有100个字符。我现在需要为每一行添加100个额外的空格。如果空格很少,我们可以使用sed,如:
sed 's/$/ /' filename > newfilename
由于它是100个空格,任何人都可以告诉我是否可以在Unix中添加?
答案 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中工作很有用,但对于脚本来说不是很漂亮 - 使用任何其他解决方案。