.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
これを行うにはsed
orコマンドを使用しようとしています。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