같은 행의 2개 열에서 최소값 찾기

같은 행의 2개 열에서 최소값 찾기

안녕하세요. 데이터 파일이 있는데 열 6과 8에서 최소값(0보다 큼)을 찾고 후속 열 7이나 9를 가져와야 합니다.

원시 데이터:

1003 04 10 2 2 **1172** *2140* 1179 2140
1003 04 14 4 0 1162 2140 **1161** *1640*
1003 04 9 1 1 **1152** 1640 1157 1640
1004 04 5 0 **1190** *2140* 0 0
1004 04 10 1 0 **1184** *2160* 0 0
1004 04 9 1 0 **1171** *1640* 1198 2140
1006 04 10 3 1 **1157** *2140* 1168 1640
1006 04 9 3 1 0 0 **1149** *1640*
1006 04 2 0 0 1171 2160 **1160** *1640*
1007 04 4 0 0 **1199** *2140* 0 0
1007 04 20 3 3 **1164** *2140* 1197 2140
1007 04 7 0 0 0 0 **1185** *2140*

예상 출력

1003 04 10 2 2 1172 2140 
1003 04 14 4 0 1161 1640
1003 04 9 1 1 1152 1640 
1004 04 5 0 1190 2140 
1004 04 10 1 0 1184 2160 
1004 04 9 1 0 1171 1640 
1006 04 10 3 1 1157 2140 
1006 04 9 3 1 1149 1640
1006 04 2 0 0 1160 1640
1007 04 4 0 0 1199 2140 
1007 04 20 3 3 1164 2140 
1007 04 7 0 0 1185 2140

답변1

$ awk '($8 > 0 && $8 < $6) || ($6 == 0) { $6 = $8; $7 = $9 }; 1' file | cut -d ' ' -f 1-7
1003 04 10 2 2 1172 2140
1003 04 14 4 0 1161 1640
1003 04 9 1 1 1152 1640
1004 04 5 0 1190 2140 0
1004 04 10 1 0 1184 2160
1004 04 9 1 0 1171 1640
1006 04 10 3 1 1157 2140
1006 04 9 3 1 1149 1640
1006 04 2 0 0 1160 1640
1007 04 4 0 0 1199 2140
1007 04 20 3 3 1164 2140
1007 04 7 0 0 1185 2140

열 6이 0이거나 열 8이 0보다 크고 열 6보다 작은 경우 열 6과 7이 열 8과 9로 덮어쓰여집니다.

그런 다음 해당 명령의 결과를 사용하여 awk7개의 열로 자릅니다 cut.

0입력 데이터의 네 번째 행에는 너무 적은 열이 포함되어 있습니다(네 번째 또는 다섯 번째 열이 누락되었을 수 있음). 이것이 바로 내 결과가 질문의 예상 결과에 비해 추가 내용을 포함하는 것처럼 보이는 이유입니다. 결과를 다음으로 전달하면 column -t:

1003  04  10  2  2     1172  2140
1003  04  14  4  0     1161  1640
1003  04  9   1  1     1152  1640
1004  04  5   0  1190  2140  0
1004  04  10  1  0     1184  2160
1004  04  9   1  0     1171  1640
1006  04  10  3  1     1157  2140
1006  04  9   3  1     1149  1640
1006  04  2   0  0     1160  1640
1007  04  4   0  0     1199  2140
1007  04  20  3  3     1164  2140
1007  04  7   0  0     1185  2140

관련 정보