다음 코드를 사용하여 단일 태그가 포함된 파일의 이전 줄을 인쇄합니다.
#! /bin/ksh
file=input.txt
while read line
do
awk 'NF == 1 { print LAST } { LAST=$0 }'
done < "$file"
이제 결과를 반복하고 줄 끝에 연속적인 홀수 위치가 있고 이러한 위치가 언급된 숫자와 일치하지 않을 때까지 9번째 위치, 11번째 위치, 13번째 위치 등을 확인해야 합니다.
201
230
197
193
229
200
215
226
001
198
오류는 로 인쇄되어야 하고 CORRUPTED
, 그렇지 않으면 AVAILABLE
인쇄되어야 합니다.
내 파일의 예는 다음과 같습니다.
59 6 18 2014 169 7 14 2 7671912 7849744 201 4
60 6 19 2014 170 5 49 2 7671912 7849744 201 5
61 6 20 2014 171 6 8 2 7671912 7849744 201 6
62 6 23 2014 174 5 3 2 7671912 7849744 201 7
63 6 23 2014 174 7 17 2 7671912 7849744 201 8
64 6 24 2014 175 16 13 2 7671912 7849744 201 9
65 6 25 2014 176 8 20 2 7671912 7849744 201 10
10
1 1 49 6 16 2014 7 39 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871
1 2 49 6 17 2014 13 15 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871
1 3 49 6 18 2014 1 38 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871
1 4 49 6 18 2014 7 14 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871
1 5 49 6 19 2014 5 49 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871
이를 예로 들면 9위는 7671912 입니다.
참고: 이 코드는 다른 파일에서도 작동해야 합니다.
답변1
이 시도:
$ echo "65 6 25 2014 176 8 20 2 7671912 7849744 201 10" |
awk 'FNR == NR { a[$1]; next }
{
for (i = 9; i <= NF; i += 2) {
if (!($i in a)) {
flag = 1;
}
}
if (flag) {
print "CORRUPTED";
} else {
print "AVAILABLE";
}
}
' file -
CORRUPTED
file
비교할 모든 숫자를 포함합니다. echo "65 6 25 2014 176 8 20 2 7671912 7849744 201 10"
이 테스트의 스크립트를 단일 토큰이 포함된 파일의 이전 줄을 인쇄하는 스크립트로 바꿔야 합니다 .
설명하다
FNR == NR { a[$1]; next }
: 처리하는 동안 각 숫자를 배열에file
저장합니다 .file
a
- 읽은 후에는
file
field에서 시작하여 모든 홀수 필드를 반복 하고9th
배열에 없으면 필드 값을a
설정합니다flag = 1
. - 마지막으로 1로 설정되면
flag
값이 에 없는 필드가 하나 이상 있다는 의미file
이므로 인쇄하고CORRUPTED
, 그렇지 않으면 인쇄합니다AVAiLABLE
.