Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
Macos 根据使用awk的其他行中的字符数在一行中添加零_Macos_Bash_Shell_Awk - Fatal编程技术网

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个月左右的时间里,你已经发布了。不幸的是,你从这些答案中几乎一无所获。