Text-Processing
通過比較同一文件中的欄位值,有條件地繞過 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
我正在嘗試使用
sed
orawk
命令來完成此操作。
聽起來這可能是你想要做的:
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