如果行长度小于固定长度,如何在行中间添加空格?

Str*_*ler 1 unix bash shell awk sed

如果任何行的长度小于固定长度(10),我想在文本文件的中间添加空格。空格的位置固定在第 4 个字符之后。

\n

像这样的文件:

\n
ABCEFGH  K<\xe2\x80\x94 length: 10\nABCDE  FGH<- length: 10\nABCD  EFG<- length: 9\nABCDE FGH<- length: 9\nABCDE<-length: 5\n
Run Code Online (Sandbox Code Playgroud)\n

期望的输出:

\n
ABCEFGH  K<\xe2\x80\x94 length: 10\nABCDE  FGH<- length: 10\nABCD   EFG<- length: 10\nABCD  EFGH<- length: 10\nABCD     E<- length: 10\n
Run Code Online (Sandbox Code Playgroud)\n

我\xe2\x80\x99m 对 bash 真的很陌生。如果行小于固定长度,我尝试过使用 awk 和 sed 附加 0 之类的方法。它工作完美,但我想要实现的是在给定位置添加空格,从而修改原始文件。

\n

我很感激任何见解!

\n

我尝试过的方法:\n< /sf/ask/3251062531/固定长度/46443954>

\n

更新:

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

这是我尝试过的上述链接中的代码。由于我无法\xe2\x80\x99想出如何在中间添加空格,并使每行保持固定长度,所以我无法\xe2\x80\x99t提供它的代码。对于没有提供代码,我深表歉意。

\n

Ed *_*ton 5

$ awk -v tgt=10 'length($0)<tgt{gsub(/ /,""); $0=substr($0,1,4) sprintf("%*s",tgt-length($0),"") substr($0,5)} 1' file
ABCEFGH  K
ABCDE  FGH
ABCD   EFG
ABCD  EFGH
ABCD     E
Run Code Online (Sandbox Code Playgroud)