使用 awk 和 if - else if 语句操作数据列



我有.txt文件,如下所示,几行:

018 1003 229 1842 1A1 493246.2 7689486.2
018 1003 229 1841 1A2 493233.6 7689535.4
018 1003 229 1840 1A1 493286.9 7689515.8
018 1003 229 1839 1A2 493274.7 7689562.9

我需要添加一个额外的列来放置具有此条件的值

If 1A1 new value=(1003 + 1)
If 1A2 new value=(1003 - 1)

期望的输出

018 1003 229 1842 1A1 493246.2 7689486.2 1004
018 1003 229 1841 1A2 493233.6 7689535.4 1002
018 1003 229 1840 1A1 493286.9 7689515.8 1004
018 1003 229 1839 1A2 493274.7 7689562.9 1002

请注意,这是一个示例,此处的第 2 列是 1003,但对于其他文件可以是 1010 或 1001 等。

我正在使用

cat ${seq}_${n_rline}.s01 |awk '{if ($5="1A1")print $0, ($2 + 1);else if ($5="1A2")print $0, ($2 - 1)} '> test100.txt

我得到的输出是

018 1003 229 1842 1A1 493246.2 7689486.2 1004
018 1003 229 1841 1A1 493233.6 7689535.4 1004
018 1003 229 1840 1A1 493286.9 7689515.8 1004
018 1003 229 1839 1A1 493274.7 7689562.9 1004
018 1003 229 1838 1A1 493329.0 7689544.6 1004

所以我正在替换所有 1A2,因此最后一列包含所有 1004。

知道如何解决这个问题吗?

我找到了正确的命令(或者至少它正在工作(

cat input.txt | awk '{if($5 ~/1A1/) print $0, ($2 + 1); else if($5 ~/1A2/) print $0, ($2 - 1)}' > output.txt

最新更新