我需要比较.txt
文件每一行的两个日期。如果位置11中的值等于“02407IC”并且“21100220”减去“19860220”等于124年,我想绕过这个记录,否则我想把这个记录写入输出。
到目前为止,我尝试了sed
如下命令,但它仅解决了从文件中绕过/删除记录的部分问题(如果它找到了值)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
orawk
命令来完成此任务。
答案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