我有一些看起来像这样的文本文件:
558903
5589157
55893434
55907235
.
.
.
127158709
1271587172
127158748
我只想更改每个文件的第一行和最后一行。
我想在第一行添加零,具体取决于前10行中的字符数。因此,例如,如果在前10行中,有一行的最大字符数为8(就像我的例子中),我需要在第一行添加尽可能多的零,以便它也有8个字符(在这种情况下,两个零)
我最后一行需要同样的东西。所以,我需要检查最后10行中的最大字符数(在我的示例中为10),并在我的最后一行添加尽可能多的零以包含尽可能多的字符(在这种情况下只有一个零)。 / p>
我的输出应该是这样的:
55890300
5589157
55893434
55907235
.
.
.
127158709
1271587172
1271587480
在另一篇文章中,有人帮我使用了这个脚本,但它根据所有行中的最大字符数为所有行添加了多个零(我只是注意到,这不是我需要的,所以这是我的错不是他的。)
$ awk '
{
max = ((max > length($1)) ? max : length($1))
a[NR] = $1
}
END {
for(x=1; x<=NR; x++) {
n = max - length(a[x])
while(n-->0) {
a[x] = a[x] "0"
}
print a[x]
}
}' file
提前致谢。
答案 0 :(得分:1)
试试这个:
awk '
NR==FNR {
len[NR] = length($1)
last = NR
next
}
FNR==1 {
for(i=1; i<=num; i++) {
fm = ((fm>len[i])?fm:len[i])
}
for(j=(last); j>(last-num); j--) {
lm = ((lm>len[j])?lm:len[j])
}
$1 = $1 * 10 ** (fm-length($1))
}
FNR==last {
$1 = $1 * 10 ** (lm-length($1))
}1' num=10 file file
您可以将 num=
设置为您想要比较的任意数量的行。根据此范围内的最大长度,文件的第一行和最后一行将附加 0
。
答案 1 :(得分:0)
使用sed,直接编辑文件:
head_max=$(( $(head -10 file.txt | wc -L) -1 ))
tail_max=$(( $(tail -10 file.txt | wc -L) -1 ))
sed -i.bk ":a 1 s/^.\{1,$head_max\}$/&0/;ta" file.txt
sed -i.bk ":a $ s/^.\{1,$tail_max\}$/&0/;ta" file.txt