Macos 根据使用awk的其他行中的字符数在一行中添加零
我有一些文本文件如下所示:Macos 根据使用awk的其他行中的字符数在一行中添加零,macos,bash,shell,awk,Macos,Bash,Shell,Awk,我有一些文本文件如下所示: 558903 5589157 55893434 55907235 . . . 127158709 1271587172 127158748 55890300 5589157 55893434 55907235 . . . 127158709 1271587172 1271587480 我只想更改每个文件的第一行和最后一行 我想在第一行加上零,这取决于前10行中的字符数。例如,如果在前10行中,有一行的最大字符数是8(就像在我的示例中),我需要在第一行中添加尽可能多
558903
5589157
55893434
55907235
.
.
.
127158709
1271587172
127158748
55890300
5589157
55893434
55907235
.
.
.
127158709
1271587172
1271587480
我只想更改每个文件的第一行和最后一行
我想在第一行加上零,这取决于前10行中的字符数。例如,如果在前10行中,有一行的最大字符数是8(就像在我的示例中),我需要在第一行中添加尽可能多的零,以便它也有8个字符(在本例中为两个零)
我的最后一行也需要同样的东西。因此,我需要再次检查最后10行中的最大字符数(在我的示例中为10),并在最后一行中添加尽可能多的零以获得尽可能多的字符(在本例中仅为一个零)
我的输出应该如下所示:
558903
5589157
55893434
55907235
.
.
.
127158709
1271587172
127158748
55890300
5589157
55893434
55907235
.
.
.
127158709
1271587172
1271587480
在另一篇文章中,有人帮我使用了这个脚本,但它根据所有行中的最大字符数在所有行中添加了尽可能多的零(我只是注意到,这不是我需要的,所以这是我的错,不是他的错)
$awk'
{
最大值=((最大值>长度($1))?最大值:长度($1))
a[NR]=1美元
}
结束{
对于(x=1;x0){
a[x]=a[x]“0”
}
打印a[x]
}
}"档案"
提前谢谢。试试这个:
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
awk'
NR==FNR{
长度[NR]=长度($1)
最后=个
下一个
}
FNR==1{
对于(i=1;ilen[i])?fm:len[i])
}
对于(j=(最后一个);j>(最后一个数值);j--){
lm=((lm>len[j])?lm:len[j])
}
$1=$1*10**(调频长度($1))
}
FNR==最后一个{
$1=$1*10**(长轴长度($1))
}1'num=10个文件
您可以将
num=
设置为要比较的任意行数。根据在此范围内找到的最大长度,文件的第一行和最后一行将追加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
在过去的好日子里,这太本地化了。我认为这是一个很大的文本,因为我的英语不是很好,我需要很多的文本让你理解我。我不认为这个问题有那么难,但考虑到我的技能,我做不到。撇开问题的复杂性不谈,你应该从问题的答案中学到一些东西。在3个月左右的时间里,你已经发布了。不幸的是,你从这些答案中几乎一无所获。