如果该行小于固定长度,则将0添加到unix/bash中的文件

Jor*_*son 1 unix string bash awk sed

我正在寻找一种方法,如果它们的长度少于66个字符,则将0添加到文件中多行的末尾,以便总行长度等于66.

这是文件格式的一个例子(...表示前面56个字符):

$cat file1
...1234567891
...123456
...
...12345678
Run Code Online (Sandbox Code Playgroud)

理想格式:

...1234567891
...1234560000
...0000000000
...1234567800
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 5

Awk解决方案:

样本文件input.txt:

ghWuec]UGaEjxQRN4qUe3uyhNmBszZeJq]0A5hZJiI[fQ[8anRKnpoLXWBwfFt300S
0jmyMPlQbSpFf[ZNdQvR]BwuYxgW6zkBYRPC1PwJEowd7[MmeiWp8Pienu1F32
G]nGbsTdvO24e7Ts5cLRIaYy[zOcUHau5Q7slRYmkcx2LTNR46QE]gs7vKPj
Zxr6HwG15YyYZnDvRDibjOKOlpacrU5oZTWhBixY23]yWfbHe4i6ztME
Run Code Online (Sandbox Code Playgroud)

工作:

awk '{ if(length<66) printf "%s%0*d\n",$0,66-length,0; else print }' input.txt
Run Code Online (Sandbox Code Playgroud)

输出:

ghWuec]UGaEjxQRN4qUe3uyhNmBszZeJq]0A5hZJiI[fQ[8anRKnpoLXWBwfFt300S
0jmyMPlQbSpFf[ZNdQvR]BwuYxgW6zkBYRPC1PwJEowd7[MmeiWp8Pienu1F320000
G]nGbsTdvO24e7Ts5cLRIaYy[zOcUHau5Q7slRYmkcx2LTNR46QE]gs7vKPj000000
Zxr6HwG15YyYZnDvRDibjOKOlpacrU5oZTWhBixY23]yWfbHe4i6ztME0000000000
Run Code Online (Sandbox Code Playgroud)

同样可以缩短为:

awk 'length<66{ printf "%s%0*d\n",$0,66-length,0;next }1' input.txt
Run Code Online (Sandbox Code Playgroud)