同じファイルのフィールド値を比較して、Linux上の.txtファイルのレコードを条件付きでバイパスする

同じファイルのフィールド値を比較して、Linux上の.txtファイルのレコードを条件付きでバイパスする

.txtファイルの各行に対して2つの日付を比較する必要があります。位置11の値が「02407IC」で「21100220」から「19860220」を引いた値が124の場合はこのレコードを無視し、そうでない場合はこのレコードを出力に書きたいと思います。

これまで、次のコマンドを試しましたが、sedファイル内のレコードをバイパス/削除する問題(値が見つかった場合)を部分的にのみ解決しましたが、2つの日付を比較してその比較をInコマンド02407ICに含める方法を知ることはできません。sed

sed -i '/02407IC/d' MARK.TXT

ファイル内のサンプルデータ。以下は実際のファイルではなく、入力ファイルで私が探している値です。実際の入力ファイルでは、「02407IC」などの値は位置398にあり、「19860220」などの子日付は場所265(常に存在/塗りつぶし)にあり、「21100220」などの親日付は位置690にあり、高い日付もあります。日付は空白にすることができます。

19860220 02407IC 21100220
19660121 02501IC 20200218
19670301 02501IC 20200218
19880420 03105IC         

これを行うにはsedorコマンドを使用しようとしています。awk

ベストアンサー1

これがあなたがやりたいことのようです:

awk '!( ($2 == "02407IC") && (($3 - $1) ~ /^124....$/) )' file

あなたが言う「場所」が何であるかはわかりませんが、各行の文字位置であり、フィールド1は文字位置265で始まり、フィールド2は398で始まり、フィールド3は690で始まります(更新された質問に従って)。それからあなたはできます:

awk '!( (substr($0,398,7) == "02407IC") && ((substr($0,690,4) - substr($0,265,4)) == 124) )' file

おすすめ記事