Text-Processing

通過比較同一文件中的欄位值,有條件地繞過 Linux 中 .txt 文件中的記錄

  • February 19, 2020

我需要比較.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命令來完成此操作。

聽起來這可能是你想要做的:

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

引用自:https://unix.stackexchange.com/questions/568512