원격 SSH 세션에서 awk를 사용하여 특정 열을 인쇄하는 방법은 무엇입니까?

원격 SSH 세션에서 awk를 사용하여 특정 열을 인쇄하는 방법은 무엇입니까?

그것을 사용할 때

df -h | grep /dev/root | awk '{print $5}'

Pi에서 SD 카드 사용량을 얻었습니다.78%

하지만 내가 사용할 때

/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print $5}'"

다른 컴퓨터에서 다음을 얻습니다.

/dev/root       7.2G  5.3G  1.6G  78% /

가득한 df -h:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  5.3G  1.6G  78% /
devtmpfs        364M     0  364M   0% /dev
tmpfs           368M   68K  368M   1% /dev/shm
tmpfs           368M  5.2M  363M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           368M     0  368M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   21M   40M  35% /boot
tmpfs            74M  4.0K   74M   1% /run/user/1000

답변1

인용 문제가 있습니다. $5잘못된 시간에 해석되고 있습니다. 적어도 두 가지 해결책이 있습니다:

  1. \예를 들어 $;

    /usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"
    
  2. 원격으로 실행 df하지만 grep로컬로 실행합니다 awk. 예를 들어

    /usr/bin/ssh -i /path/to/key user@server df -h | grep /dev/root | awk '{print $5}'
    

FWIW, 두 번째 옵션의 버전을 실행하지만 병합 grep하고awk

/usr/bin/ssh -i /path/to/key user@server df -h | awk '/\/dev\/root/ {print $5}'

답변2

이것은 작동합니다:

/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"

\이전 포함에 주의하십시오 $. 이것이 없으면 로컬 쉘은 빈 변수를 확장하여 $5원격 서버로 보냅니다. 기본적으로 전체 줄을 인쇄합니다.

답변3

$n완전성을 위해 또 다른 접근 방식은 in이 쉘과 같은 구문의 특별한 경우가 아니라 awk정수 표현식에 적용되는 연산자라는 사실을 사용하는 것입니다 .$variable$

(ssh key&remote) "df -h | grep /dev/root | awk '{print $ 5}'"

또는 다음과 같이 결합

(ssh key&remote) "df -h | awk '/\\/dev\\/root/ {print $ 5}'"
# can use [/] instead of ugly \\/ in gawk, but maybe not others

아니면 변수로 더 좋을 수도 있습니다.

(ssh key&remote) "df -h | awk -vm=/dev/root '$ 0 ~ m {print $ 5}'"

그러나 개인적으로 나는 현지에서 활동하는 것을 선호하는 Stephen Harris의 의견에 동의합니다 awk.

관련 정보