通过比较同一文件中的字段值,有条件地绕过 Linux 中 .txt 文件中的记录

通过比较同一文件中的字段值,有条件地绕过 Linux 中 .txt 文件中的记录

我需要比较.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         

我正在尝试使用sedorawk命令来完成此任务。

答案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

相关内容