파일 1의 두 번째 열(사용 가능한 메모리)과 파일 2의 두 번째 열(사용된 메모리)을 비교하고 싶습니다. file1(열 2)이 "freememory" > file2(열 2)가 "usedmemory"이면 print file2(열 1) - "machine"을 file1(열 1) - " Storage"로 재배치할 수 있고, 그렇지 않으면 file2(첫 번째 열)-"machine"은 file1(첫 번째 열)-"storage"로 재배치할 수 없습니다.
비교는 file2의 첫 번째 줄과 file1의 첫 번째 줄 사이에서 이루어져야 합니다. file2의 라인 2와 file1의 라인 2입니다. 이는 file2의 n번째 라인이 file1의 n번째 라인과만 비교되어야 함을 의미합니다.
두 파일 모두 내림차순으로 정렬됩니다.
file1은 컬럼2의 내림차순으로 정렬됩니다.
파일2는 컬럼2의 내림차순으로 정렬됩니다.
파일 1-
Storage,Freememory
0843,282856
0867,270891
0842,232803
0868,213426
0849,188785
0844,188784
0860,169249
0855,169246
0862,169245
0853,169244
0850,112497
0857,112496
0841,112496
0839,112495
0848,112494
0851,112493
파일 2-
Machine,UsedMemory
x0aaa06,111113232
x0aaa05,78851
x0aaa01,10243
x0aaa03,4099
원하는 출력 -
x0aaa06 cannot be relocated to 0843
x0aaa05 can be relocated to 0867
x0aaa01 can be relocated to 0842
x0aaa03 can be relocated to 0868
답변1
file1에 빈 두 번째 줄이 없다고 가정합니다.
paste -d, file1 file2 | awk -F, 'NR>1{if ($2 > $4) print $3,"can be relocated to",$1 ; else print $3,"cannot be relocated to",$1}'
paste
행의 결합된 열로 구성된 "파일"을 awk에 제공하는 데 사용됩니다 .
awk 자체는 매우 간단합니다. 라인 2(NR > 1)에서 시작하고 게으르기 때문에 printf 대신 print를 사용합니다.