다음과 같이 결과를 인쇄하는 명령을 어떻게 구성할 수 있습니까?
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