열의 명령 출력 정렬

열의 명령 출력 정렬

내 스크립트의 출력은 다음과 같습니다.

panos@panos:~/scripts> ./list_packages openSUSE-2016-254
zypper-aptitude.noarch : 1.12.23-1.1 update needed
zypper-log.noarch : 1.12.23-1.1 update needed
libsolv-debugsource : None not installed
libsolv-demo : None not installed
libsolv-demo-debuginfo : None not installed
libsolv-devel : None not installed
libsolv-devel-debuginfo : None not installed
libsolv-tools : 0.6.14-1.1 update needed
libsolv-tools-debuginfo : None not installed
perl-solv : None not installed
perl-solv-debuginfo : None not installed
python-solv : 0.6.14-1.1 update needed
python-solv-debuginfo : None not installed
ruby-solv : None not installed
ruby-solv-debuginfo : None not installed
libzypp : 15.19.5-1.1 update needed
libzypp-debuginfo : None not installed
libzypp-debugsource : None not installed
libzypp-devel : None not installed
libzypp-devel-doc : None not installed
zypper : 1.12.23-1.1 update needed
zypper-debuginfo : None not installed
zypper-debugsource : None not installed

출력은 일부 if-else 문을 기반으로 생성됩니다. 내 소스 코드에 사용된 세 가지 echo 명령을 알려 드리겠습니다.

echo "$pkg : $pkg_version update needed"
echo "$pkg : $new_version updated"
echo "$pkg : None not installed"

내 문제는 다음과 같은 열에 있기를 원한다는 것입니다.

$pkg\t$pkg_version\t$message

그러나 일부 패키지 이름이 8자를 초과하므로 전체 "탭"이 보기 흉해집니다. 어떤 제안이 있으십니까?

답변1

두 가지 방법이 있습니다:

  1. bash' printf기능을 사용하여 출력을 인쇄하고 형식을 지정합니다( 대신 echo).
  2. column -s : -t명령 사용

./list_packages openSUSE-2016-254 | column -s : -t 
zypper-aptitude.noarch     1.12.23-1.1 update needed
zypper-log.noarch          1.12.23-1.1 update needed
libsolv-debugsource        None not installed
libsolv-demo               None not installed
libsolv-demo-debuginfo     None not installed
libsolv-devel              None not installed
libsolv-devel-debuginfo    None not installed
libsolv-tools              0.6.14-1.1 update needed
libsolv-tools-debuginfo    None not installed
perl-solv                  None not installed
perl-solv-debuginfo        None not installed
python-solv                0.6.14-1.1 update needed
python-solv-debuginfo      None not installed
ruby-solv                  None not installed
ruby-solv-debuginfo        None not installed
libzypp                    15.19.5-1.1 update needed
libzypp-debuginfo          None not installed
libzypp-debugsource        None not installed
libzypp-devel              None not installed
libzypp-devel-doc          None not installed
zypper                     1.12.23-1.1 update needed
zypper-debuginfo           None not installed
zypper-debugsource         None not installed

답변2

다음과 같은 것을 사용할 수 있습니다.while read -r arg1 arg2; do awk '{print "package: $arg1 version: $arg1}';done < input file

따라서 아이디어는 arg1이 항상 줄의 첫 번째 단어가 되고 arg2가 두 번째 단어가 되는 식입니다. etc를 사용하여 if grep원하는 것을 얻을 수 있습니다. 도움이 되었기를 바랍니다!

관련 정보