単一のトークンを含むファイルの前の行を印刷したら、要件を満たすために結果を繰り返す必要があります。

単一のトークンを含むファイルの前の行を印刷したら、要件を満たすために結果を繰り返す必要があります。

次のコードを使用して、単一のタグを含むファイルの前の行を印刷します。

#! /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保存します。filea
  • 読み取ったら、fileフィールドから始めてすべての奇数フィールドを繰り返し、9th配列にない場合はフィールド値をa設定しますflag = 1
  • 最後に 1 に設定すると、flag値が にないフィールドが 1 つ以上あるという意味fileなので印刷しCORRUPTED、それ以外の場合は印刷しますAVAiLABLE

おすすめ記事