grep으로 필터링한 후 터미널에서 테이블 데이터를 다시 정렬하는 방법이 있습니까?

grep으로 필터링한 후 터미널에서 테이블 데이터를 다시 정렬하는 방법이 있습니까?

내가 얻은 것의 좋은 예:

  • ss -axl수신 UNIX 도메인 소켓을 표시하려고 시도합니다 . 예를 들어 다음과 같은 결과가 나올 수 있습니다.

      Netid     State      Recv-Q     Send-Q                                                                Local Address:Port              Peer Address:Port     
      u_str     LISTEN     0          0                                                              /run/systemd/private 9683                         * 0        
      u_str     LISTEN     0          0                                                        /run/systemd/fsck.progress 9690                         * 0        
      u_str     LISTEN     0          0                                                       /run/systemd/journal/stdout 9705                         * 0        
      u_str     LISTEN     0          0                                                   /var/run/dbus/system_bus_socket 13830                        * 0        
      u_str     LISTEN     0          0                                                                   /run/thd.socket 13833                        * 0        
      u_str     LISTEN     0          0                                                              /var/run/docker.sock 13835                        * 0        
      u_str     LISTEN     0          0                                                          /run/avahi-daemon/socket 13837                        * 0        
      u_str     LISTEN     0          0                                                    /run/user/1000/systemd/private 16088                        * 0        
      u_str     LISTEN     0          0                                                    /run/user/1000/gnupg/S.dirmngr 16093                        * 0        
      u_str     LISTEN     0          0                                            /run/user/1000/gnupg/S.gpg-agent.extra 16094                        * 0        
      u_str     LISTEN     0          0                                              /run/user/1000/gnupg/S.gpg-agent.ssh 16095                        * 0        
      u_str     LISTEN     0          0                                                  /run/user/1000/gnupg/S.gpg-agent 16096                        * 0        
      u_str     LISTEN     0          0                                                                /run/user/1000/bus 16097                        * 0        
      u_str     LISTEN     0          0                                          /run/user/1000/gnupg/S.gpg-agent.browser 16098                        * 0        
      u_str     LISTEN     0          0                                                              /var/run/dhcpcd.sock 16530                        * 0        
      u_str     LISTEN     0          0                                                       /var/run/dhcpcd.unpriv.sock 16531                        * 0        
      u_str     LISTEN     0          0                                         /run/user/1000/vscode-git-363c8837e0.sock 2244296                      * 0        
      u_str     LISTEN     0          0               /run/user/1000/vscode-ipc-774023f9-edb0-4abd-8647-17c77c55a895.sock 2245117                      * 0        
      u_str     LISTEN     0          0               /run/user/1000/vscode-ipc-8d96b721-cae4-439d-a861-309d7c184d10.sock 2344995                      * 0       
      u_str     LISTEN     0          0                                         /run/user/1000/vscode-git-363c8837e0.sock 2244296                      * 0        
      u_str     LISTEN     0          0               /run/user/1000/vscode-ipc-774023f9-edb0-4abd-8647-17c77c55a895.sock 2245117                      * 0        
      u_str     LISTEN     0          0               /run/user/1000/vscode-ipc-8d96b721-cae4-439d-a861-309d7c184d10.sock 2344995                      * 0       
    
  • 이제 다음을 사용하여 목록을 필터링합니다 grep.ss -axl | grep systemd

      u_str              LISTEN              0                    0                                                                     /run/systemd/private 9683                                                * 0                                  
      u_str              LISTEN              0                    0                                                               /run/systemd/fsck.progress 9690                                                * 0                                  
      u_str              LISTEN              0                    0                                                              /run/systemd/journal/stdout 9705                                                * 0                                  
      u_str              LISTEN              0                    0                                                           /run/user/1000/systemd/private 16088                                               * 0                                  
    

열은 여전히 ​​매우 넓어 일반 터미널에서는 잘 표시되지 않습니다.

원하는 결과는 필터를 통과하는 데이터에 맞게 열을 축소하는 것입니다. 경로별로 필터링하는 방법이 있을 수 있지만 ss(아직 찾지 못했습니다) 이는 ss단지 예일 뿐이므로 이 연습에서는 애플리케이션이 출력을 필터링하고 열 자체를 다시 정렬하도록 할 수 있는 방법이 없다고 가정합니다.

원하는 출력은 다음과 같습니다.

    u_str    LISTEN    0        0                  /run/systemd/private 9683         * 0
    u_str    LISTEN    0        0            /run/systemd/fsck.progress 9690         * 0
    u_str    LISTEN    0        0           /run/systemd/journal/stdout 9705         * 0
    u_str    LISTEN    0        0        /run/user/1000/systemd/private 16088        * 0

이를 볼 수 있는 또 다른 상황은 dfZFS 및 Docker를 사용하는 시스템 목록에서입니다.

    Filesystem                                                                         1K-blocks     Used Available Use% Mounted on
    devtmpfs                                                                               10240        0     10240   0% /dev
    shm                                                                                  8131012        0   8131012   0% /dev/shm
    rpool/ROOT                                                                            923596   820504     86708  91% /
    tmpfs                                                                                1626204     1900   1624304   1% /run
    /dev/sdb1                                                                              65390    33432     31958  52% /boot
    dockerpool/backup                                                                   57010048  4346880  52663168   8% /backup
    dockerpool/docker                                                                   52723200    60032  52663168   1% /var/lib/docker
    cgroup_root                                                                            10240        0     10240   0% /sys/fs/cgroup
    dockerpool/docker/fa4cd75b75e1e4eca9cb94124c61529e98313cffa2960bd5adc55e7fe65717a1  52826624   163456  52663168   1% /var/lib/docker/zfs/graph/fa4cd75b75e1e4eca9cb94124c61529e98313cffa2960bd5adc55e7fe65717a1
    dockerpool/docker/bf861c5d067c605bded3fe38794d0d291ec602b779a2eda9a46ba5ea472fc9a1  52826624   163456  52663168   1% /var/lib/docker/zfs/graph/bf861c5d067c605bded3fe38794d0d291ec602b779a2eda9a46ba5ea472fc9a1
    dockerpool/docker/c9fe2509b8e5e335fcf0f2472abea90180cb443391d86db7dd0c6a4806e63180  52830976   167808  52663168   1% /var/lib/docker/zfs/graph/c9fe2509b8e5e335fcf0f2472abea90180cb443391d86db7dd0c6a4806e63180
    dockerpool/docker/1edf9ca3849374d12ba3e9b6e5e72e8e844bc96de7c14e8e0045356b29bb2c4f  52823808   160640  52663168   1% /var/lib/docker/zfs/graph/1edf9ca3849374d12ba3e9b6e5e72e8e844bc96de7c14e8e0045356b29bb2c4f
    dockerpool/docker/8d62982afac1d3840a5987a62e9e369d5ae29d27dcb0007d0d5319ad84b2c57c  52826624   163456  52663168   1% /var/lib/docker/zfs/graph/8d62982afac1d3840a5987a62e9e369d5ae29d27dcb0007d0d5319ad84b2c57c
    dockerpool/docker/0f03f5e4ca7b9ba366643354c37ca1746a3009e97c1b9f1b0bea126a5eab5dc7  52708224    45056  52663168   1% /var/lib/docker/zfs/graph/0f03f5e4ca7b9ba366643354c37ca1746a3009e97c1b9f1b0bea126a5eab5dc7
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/d8413602c199ff17c1324d2e166b1bff3c1115406f2f14475dbd54b7c938631a/mounts/shm
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/d0f705e3be016b8b10522329c6f3e1c01d83fabc3d9a498bcfadc754a56fd3fe/mounts/shm
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/15dbaf4a13d8136b415fe257e6790b4692f3aa2d0b0197ef7d1c0e90dec703da/mounts/shm
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/b0f3856ab0ba0021832519448636498228f5b1ffedc57eec203283d514ec19ac/mounts/shm
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/68c2691f0eebcf2f765bb4bfe00c4fdba749e36966e5b42afe8f9f63aeba5803/mounts/shm
    shm                                                                                    65536        0     65536   0% /var/lib/docker/containers/21431e15bc044019c517b4d14efbbf3eb3ce1078c4419c0adb924aaebf62e283/mounts/shm
    dockerpool/docker/0dbc7d708e28e3e29b6360db440d3550ee414791e491b2d807b34079152d1487  52732416    69248  52663168   1% /var/lib/docker/zfs/graph/0dbc7d708e28e3e29b6360db440d3550ee414791e491b2d807b34079152d1487
    dockerpool/docker/3df99a7e3ec5486160e1d55479931ea597f53c0ae021f422a5d11ccd7114917b  52674176    11008  52663168   1% /var/lib/docker/zfs/graph/3df99a7e3ec5486160e1d55479931ea597f53c0ae021f422a5d11ccd7114917b
    dockerpool/docker/0f1380fdca3c53835ab637f378d11d0f81e1c8319aa59f6b289429223a48b4ed  53164928   501760  52663168   1% /var/lib/docker/zfs/graph/0f1380fdca3c53835ab637f378d11d0f81e1c8319aa59f6b289429223a48b4ed
    dockerpool/docker/711415dbd6df49794b0a3b4066b274f5d752ed2a8e1ea2dcc5bdbfe57757380e  53001088   337920  52663168   1% /var/lib/docker/zfs/graph/711415dbd6df49794b0a3b4066b274f5d752ed2a8e1ea2dcc5bdbfe57757380e
    dockerpool/docker/359ed871b4929d13789ab1f89bc9a170819ca1b1dfcb660f9ca2f60f0ac59d00  52826368   163200  52663168   1% /var/lib/docker/zfs/graph/359ed871b4929d13789ab1f89bc9a170819ca1b1dfcb660f9ca2f60f0ac59d00
    dockerpool/docker/0009ba1b93a2e49bcf00d64b3c6a1df6b9d2e8d669b61732279100725f867043  53009408   346240  52663168   1% /var/lib/docker/zfs/graph/0009ba1b93a2e49bcf00d64b3c6a1df6b9d2e8d669b61732279100725f867043
    dockerpool/docker/a1f1a7f4879e937bae9b9aeabea13cb5b291b02e133ff0c4d09f531c4e8fd04f  52717184    54016  52663168   1% /var/lib/docker/zfs/graph/a1f1a7f4879e937bae9b9aeabea13cb5b291b02e133ff0c4d09f531c4e8fd04f
    dockerpool/docker/dc632a8bf6b8da1c5c06c7e2504508b8a024af10b58837afa7b6b4a468c2695f  53693824  1030656  52663168   2% /var/lib/docker/zfs/graph/dc632a8bf6b8da1c5c06c7e2504508b8a024af10b58837afa7b6b4a468c2695f
    dockerpool/docker/a5ffc4c6e1076cc8104aae76997fa479e0d8a3cc437fc1c948177d8c2345cb2a  52903936   240768  52663168   1% /var/lib/docker/zfs/graph/a5ffc4c6e1076cc8104aae76997fa479e0d8a3cc437fc1c948177d8c2345cb2a
    dockerpool/docker/8589313f7779178dcf776756e71d8623c4f8646ba766e92ce8e6dde074cc266a  53190912   527744  52663168   1% /var/lib/docker/zfs/graph/8589313f7779178dcf776756e71d8623c4f8646ba766e92ce8e6dde074cc266a
    dockerpool/docker/243285ef997322c83565c47e6ff0d38bde8d35337ab767489cdc6a2d0735cae2  52907264   244096  52663168   1% /var/lib/docker/zfs/graph/243285ef997322c83565c47e6ff0d38bde8d35337ab767489cdc6a2d0735cae2

필터링에 사용합니다 grep(루트 파일 시스템도 ZFS에 있으므로 파일 시스템만 제외할 수 없으므로 zfs아래 파일 시스템만 제외하려고 함 dockerpool).

    $ df | grep -v docker
    Filesystem                                                                         1K-blocks     Used Available Use% Mounted on
    devtmpfs                                                                               10240        0     10240   0% /dev
    shm                                                                                  8131012        0   8131012   0% /dev/shm
    rpool/ROOT                                                                            923596   820504     86708  91% /
    tmpfs                                                                                1626204     1900   1624304   1% /run
    /dev/sdb1                                                                              65390    33432     31958  52% /boot
    cgroup_root                                                                            10240        0     10240   0% /sys/fs/cgroup

원하는 출력은 다음과 같습니다.

    Filesystem     1K-blocks   Used Available Use% Mounted on
    devtmpfs           10240      0     10240   0% /dev
    shm              8131012      0   8131012   0% /dev/shm
    rpool/ROOT        923596 820504     86708  91% /
    tmpfs            1626204   1900   1624304   1% /run
    /dev/sdb1          65390  33432     31958  52% /boot
    cgroup_root        10240      0     10240   0% /sys/fs/cgroup

답변1

작동하는 간단한 솔루션은 데이터를 에 전달하는 것입니다 column -t. 이렇게 하면 데이터의 공백 문자(탭 및 공백)를 기준으로 열이 정렬됩니다.

첫 번째 출력:

$ column -t file1
u_str  LISTEN  0  0  /run/systemd/private            9683   *  0
u_str  LISTEN  0  0  /run/systemd/fsck.progress      9690   *  0
u_str  LISTEN  0  0  /run/systemd/journal/stdout     9705   *  0
u_str  LISTEN  0  0  /run/user/1000/systemd/private  16088  *  0

나는 이것이 좋아 보인다고 말하고 싶습니다.

두 번째 출력:

$ column -t file2
Filesystem   1K-blocks  Used    Available  Use%  Mounted         on
devtmpfs     10240      0       10240      0%    /dev
shm          8131012    0       8131012    0%    /dev/shm
rpool/ROOT   923596     820504  86708      91%   /
tmpfs        1626204    1900    1624304    1%    /run
/dev/sdb1    65390      33432   31958      52%   /boot
cgroup_root  10240      0       10240      0%    /sys/fs/cgroup

이 단어가 어떻게 on별도의 열을 갖는지 확인하세요. 이는 문자열의 공백으로 인해 발생합니다 Mounted on. 이 특별한 경우에는 큰 문제가 아닐 수도 있지만 주의해야 할 점은 다음과 같습니다.어느공백이나 탭은 열 구분 기호로 처리됩니다.

데이터에 사용되는 구분 기호를 알고 있는 경우 탭만 사용 또는 탭 사용 등 column의 옵션을 통해 -s이를 지정할 수 있습니다.-s $'\t'bashzsh

관련 정보