以表格格式打印 AWK 或 GREP

以表格格式打印 AWK 或 GREP

我如何组织命令来打印结果,如下所示:

USER   | PACKAGE | CREATOR
result -  result - result
result -  result - result
result -  result - result

我想从文件中获取这些结果:/usr/local/users/*/user.conf

有多个不同用户的文件,例如:

/usr/local/users/user1/user.conf
/usr/local/users/user2/user.conf
/usr/local/users/user3/user.conf
...

我使用通配符,因为文件很多,所以我需要在表格中组织显示。

他就是这样得到内容的。

username=test
package=basic
creator=admin

我尝试了这种方式,只是为了尝试获取变量,但我不知道如何补充该命令。

grep package /usr/local/users/*/user.conf 

答案1

另一种变体:

awk -F'=' '
  BEGIN{ print "USER | PACKAGE | CREATOR" }
  $1=="username" || $1=="package" || $1=="creator"{
    printf $2 (++cnt%3 ? " - " : RS)
  }
' /usr/local/users/*/user.conf | column -t

编辑
这将按包对表进行排序,并允许文件中三个元素的顺序不同user.conf

{
  echo "USER | PACKAGE | CREATOR" 
  awk -F'=' '
    $1=="username"{ a[0]=$2 } 
    $1=="package" { a[1]=$2 }
    $1=="creator" { a[2]=$2 }
    0 in a && 1 in a && 2 in a{
      print a[0] " - " a[1] " - " a[2]
      delete a
    }
  ' /usr/local/users/*/user.conf | sort -k3,3
} | column -t

答案2

给定

$ head user?.conf
==> user1.conf <==
username=test1
package=basic1
creator=admin1

==> user2.conf <==
username=test2
package=basic2
creator=admin2

==> user3.conf <==
username=test3
package=basic3
creator=admin3

然后使用磨坊主

$ mlr --ixtab --ips = --opprint cat user?.conf 
username package creator
test1    basic1  admin1
test2    basic2  admin2
test3    basic3  admin3

如果您还想更改字段名称,那么

$ mlr --ixtab --ips = --opprint rename "username,USER,package,PACKAGE,creator,CREATOR" then cat user?.conf 
USER  PACKAGE CREATOR
test1 basic1  admin1
test2 basic2  admin2
test3 basic3  admin3

相关内容