%20%EB%B9%84%EA%B5%90.png)
Linux 환경에는 공백으로 구분된 필드(03 필드)가 있는 두 개의 텍스트 파일이 있습니다.
파일1 : ram-service1.txt
RAM used Program
23500 kb firewalld
14780 kb tuned
10140 kb polkitd
5370 kb NetworkManager
4470 kb rsyslogd
4270 kb lvmetad
4240 kb systemd
4010 kb sshd(2)
3830 kb systemd-journal
3720 kb systemd-udevd
3120 kb dhclient
1630 kb qmgr
1590 kb pickup
1180 kb master
1070 kb dbus-daemon
1000 kb chronyd
1021.00 kb sftp-server
1004.00 kb login
967.00 kb bash
867.00 kb systemd-logind
741.00 kb crond
734.00 kb auditd
450.00 kb irqbalance
397.00 kb ramusage.sh
186.00 kb pv
파일2 : ram-service2.txt
RAM used Program
23540 kb firewalld
14830 kb tuned
10140 kb polkitd
5450 kb NetworkManager
4370 kb rsyslogd
4270 kb lvmetad
4250 kb systemd
3720 kb systemd-udevd
3720 kb systemd-journal
3180 kb dhclient
1870 kb sshd
1680 kb qmgr
1640 kb pickup
1200 kb login
1190 kb master
1070 kb dbus-daemon
1010 kb chronyd
941.00 kb bash
868.00 kb systemd-logind
747.00 kb crond
736.00 kb auditd
450.00 kb irqbalance
395.00 kb ramusage.sh
183.00 kb pv
ram-service1.txt 파일의 RAM 사용 열 값을 해당 프로그램에 해당하는 ram-service2.txt 파일의 RAM 사용 열 값과 비교하면 됩니다. 예를 들어, ramservice1.txt 파일의 "firewalld's" RAM Used 값이 ramservice2.txt 파일의 "firewalld's" RAM Used 값보다 크거나 작은 경우, 이를 다른 값으로 리디렉션해야 합니다(차이 + 또는 -). 프로그램 이름이 있는 파일입니다.
누구든지 이 문제를 해결할 수 있다면 정말 감사할 것이며 저에게 큰 도움이 될 것입니다. .
답변1
이것을 시도해보세요:
awk '
NR==FNR{s1[$3]=$1;next}
{s2[$3]=$1}
END{
for (value in s1){
if (s1[value]!=s2[value]) print s1[value]-s2[value],$2,value
}
}
' ram-service1.txt ram-service2.txt | column -t > outfile
출력을 멋진 "차트" 형식으로 저장 column
하고 outfile
.
답변2
join -1 3 -2 3 <(sort -k3 file1) <(sort -k3 file2) |
awk '$2 != $4 { printf("%20s:\t%+d\n", $1, $4 - $2) }'
그러면 세 번째 열의 프로그램 이름을 기준으로 파일이 결합됩니다. 각 파일은 이 필드에 정렬된 다음 join
해당 데이터를 읽고 두 파일 모두에서 프로그램 이름이 일치하는 행을 출력합니다. 해당 단계의 출력은 다음과 같습니다.
Program RAM used RAM used
NetworkManager 5370 kb 5450 kb
auditd 734.00 kb 736.00 kb
bash 967.00 kb 941.00 kb
chronyd 1000 kb 1010 kb
crond 741.00 kb 747.00 kb
(등.)
... 여기서 첫 번째 열은 이제 프로그램 이름이고, 두 번째 열은 첫 번째 파일의 번호이고, 네 번째 열은 두 번째 파일의 번호입니다.
이를 읽는 프로그램 awk
은 2열과 4열의 값을 테스트하여 서로 다른 경우 차이가 있는 줄을 작성합니다.
질문에 주어진 데이터에 따른 결과는 다음과 같습니다.
NetworkManager: +80
auditd: +2
bash: -26
chronyd: +10
crond: +6
dhclient: +60
firewalld: +40
login: +196
master: +10
pickup: +50
pv: -3
qmgr: +50
ramusage.sh: -2
rsyslogd: -100
systemd: +10
systemd-journal: -110
systemd-logind: +1
tuned: +50
음수 값은 두 번째 파일에서 더 작은 것을 의미합니다.