我有一个如下所示的“example_file”,
a2022.1 a2022.1 80
a2022.1 a2022.2 90
a2022.1 a2023.1 80
a2022.2 a2022.2 90
a2022.2 a2023.1 40
a2022.3 a2022.1 50
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)
我想选择第三列 > 80 并且第一列(点之前)与第二列(点之前)不同的行。
所以期望的结果是
a2022.1 a2023.1 80
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)
因此,我已经成功地使用下面的行排除了第三列 <80 以及第一列和第二列相同的行
awk '($3 > 80 && $1!=$2)' example_file
Run Code Online (Sandbox Code Playgroud)
我尝试过awk '($3 > 80 && $1!~$2)' example_file,但它并不排除该行
a2022.1 a2022.2 90
Run Code Online (Sandbox Code Playgroud)
我以为这很容易,但我无法弄清楚。有人可以帮忙吗?谢谢!
你可以使用这个awk:
awk -F '[.[:blank:]]' '$NF >= 80 && $1 != $3' file
a2022.1 a2023.1 80
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)
这里-F '[.[:blank:]]'将输入字段分隔符设置为点或空白字符。这允许我们将第一列的部分用作 和$1,$2将第二列的部分用作$3和$4。
或者使用gnu-awk:
awk '$3 >= 80 &&
gensub(/\..*/, "", "1", $1) != gensub(/\..*/, "", "1", $2)' file
a2022.1 a2023.1 80
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)