![df -k 명령의 올바른 출력을 얻는 방법](https://linux55.com/image/81705/df%20-k%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
df -k 명령을 사용하는 데 문제가 있습니다. 다른 목적으로 사용할 수 있도록 결과가 올바른 형식이어야 합니다.
시스템 1 - 이 명령을 사용했습니다( df -k | tr -s " " ).
출력 1
$ df -k | tr -s " "
Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 1703936 1317848 23% 7154 1% /
/dev/hd2 4849664 2106456 57% 57120 5% /usr
/dev/hd9var 3670016 939564 75% 16242 2% /var
/dev/hd3 3932160 3787604 4% 382 1% /tmp
/dev/hd1 5242880 1046220 81% 71598 6% /home
/proc - - - - - /proc
/dev/hd10opt 2228224 440928 81% 17096 4% /opt
/dev/ecclv 1048576 165284 85% 2928 2% /opt/ecc
/dev/metriclv 131072 96768 27% 102 1% /var/adm/metric
/dev/perflv 262144 120840 54% 80 1% /var/opt/perf
/dev/carhome_lv 10485760 7249912 31% 264574 15% /xcarapps/prod
/dev/cdnhome_lv 59572224 11050440 82% 2317 1% /apps5
/dev/ccds_lv 27230208 21092196 23% 1075858 19% /apps2
/dev/appslv 2293760 1848688 20% 938 1% /apps
시스템 2 - 이 명령을 사용했습니다( df -k | tr -s " " ).
출력 2
$ df -k | tr -s " "
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-lvroot
2789856 384228 2263908 15% /
udev 99240232 600 99239632 1% /dev
tmpfs 99240232 32 99240200 1% /dev/shm
/dev/cciss/c0d0p1 1035660 81632 901420 9% /boot
/dev/mapper/vg00-lvhome
690217 441040 213557 68% /home
/dev/mapper/vg00-lvopt
3096336 2189872 749180 75% /opt
/dev/mapper/vg00-lvnetbk60
4128448 1048232 2870504 27% /opt/openv
하지만 출력 1과 유사한 위의 출력이 필요합니다(아래 표시된 올바른 줄에 있음을 의미합니다).
원하는 출력
$ df -k | tr -s " "
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-lvroot 2789856 384228 2263908 15% /
udev 99240232 600 99239632 1% /dev
tmpfs 99240232 32 99240200 1% /dev/shm
/dev/cciss/c0d0p1 1035660 81632 901420 9% /boot
/dev/mapper/vg00-lvhome 690217 441040 213557 68% /home
/dev/mapper/vg00-lvopt 3096336 2189872 749180 75% /opt
/dev/mapper/vg00-lvnetbk60 4128448 1048232 2870504 27% /opt/openv
이것이 필요한 이유는 무엇입니까? 아래 코드를 사용하여 출력을 TXT 문서에 작성해야 합니다. "시스템 1"에서는 작동하지만 형식 문제로 인해 "시스템 2"에서는 쓸 수 없습니다.
시스템 1의 출력을 TXT 파일에 쓰는 올바른 코드
unix_space=`df -k | tr -s " " | awk '{if (substr($4,1,(length($4)-1)) >=92) printf "%-30s\n",$1;}'|wc -l`
df -k | tr -s " " | awk 'BEGIN {print"##############################################################################\n File System Total Space Free space used% Mounted Directory \n##############################################################################\n"} {if (substr($4,1,(length($4)-1)) >=92) printf "%-30s|%-12s|%-12s|%-7s|%-30s\n",$1,$2,$3,$4,$7;}' > ${DATA}/logs/UNIXSPACE.txt
답변1
사용 df -P
:
-P, --portability use the POSIX output format
$ df -P
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg00-lv_root 14987656 4220264 9999392 30% /
tmpfs 4026908 60932 3965976 2% /dev/shm
/dev/sda1 487652 36259 425793 8% /boot
/dev/mapper/vg00-lv_tmp 5916420 47636 5561584 1% /tmp
/dev/mapper/vg00-lv_var 20027260 1683820 17319440 9% /var
...