linux - sed/awk : Aligning words in a file

标签 linux bash awk sed text-processing

我有一个具有以下结构的文件:

# #################################################################
#   TEXT: MORE TEXT
#   TEXT: MORE TEXT
# #################################################################

___________________________________________________________________
ITEM 1
___________________________________________________________________
PROPERTY1:     VALUE1_1
PROPERTY222:   VALUE2_1
PROPERTY33:    VALUE3_1
PROPERTY4444:  VALUE4_1
PROPERTY55:    VALUE5_1

Description1:  Some text goes here
Description2:  Some text goes here

___________________________________________________________________
ITEM 2
___________________________________________________________________
PROPERTY1:     VALUE1_2
PROPERTY222:   VALUE2_2
PROPERTY33:    VALUE3_2
PROPERTY4444:  VALUE4_2
PROPERTY55:    VALUE5_2

Description1:  Some text goes here
Description2:  Some text goes here

我想使用 sed 或 awk 将另一个项目添加到文件中:

 sed -i -r "\$a$PROPERTY1:     VALUE1_3" file.txt
 sed -i -r "\$a$PROPERTY2222:     VALUE2_3" file.txt

等等。所以我的下一个项目如下所示:

___________________________________________________________________
ITEM 3
___________________________________________________________________
PROPERTY1:     VALUE1_3
PROPERTY222:     VALUE2_3
PROPERTY33:     VALUE3_3
PROPERTY4444:     VALUE4_3
PROPERTY55:     VALUE5_3

Description1:  Some text goes here
Description2:  Some text goes here

呈锯齿状。如何像之前的项目一样将我的值向左对齐?我可以在这里看到 2 个解决方案:

  1. 在将值插入文件时对齐值。
  2. 按照我的方式将值插入到文件中,然后对齐它们。

命令

sed -i -r "s|.*:.*|&|g" file.txt

捕获我想要对齐的属性和值,但我无法正确对齐它们,即

awk '/^.*:.*$/{ printf "%-40s %-70s\n", $1, $2 }' file.txt

它打印出文件,但包括描述值和标签,如果值包含空格或破折号,则剪切值。这真是一团糟。

根据我在 Stack Overflow 和一些博客上找到的内容,我尝试了更多命令,但没有任何命令能满足我的需要。

注意:描述标签的值不是锯齿状的 - 这是因为我以单独的方式将它们写入文件。

我的命令有什么问题吗?我如何实现我所需要的?

最佳答案

当您的文件没有选项卡时,请尝试以下操作:

sed -r 's/: +/:\t/' file.txt | expand -20 

当此操作有效时,将输出重定向到 tmpfile 并将 tmpfile 移动到 file.txt

关于linux - sed/awk : Aligning words in a file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864917/

相关文章:

bash - shell 如何检测终端是否支持颜色

bash - 如何使用SSH客户端在远程主机上运行本地代码?

Awk:使用反向匹配字符串然后替换字符

linux - 删除重复项,但只保留 linux 文件中的最后一次出现

python - 使用 Python 解析 Linux 命令

Linux SED - 保留空间 - 所有行的一个值

bash - 如何在 Bash 脚本中找到数字的阶乘?

bash - 比较不同文件中的两列并为共享项追加数据 - UNIX

linux - 在 bash tee 中,函数变量是局部的,我该如何逃避呢?

c++ - png++ 中的 undefined reference