我有一个包含两列的文件,并且只有在第二列中找不到确定的图案时才想打印第一列,该文件可以是例如:
3 0.
5 0.
4 1.
3 1.
10 0.
并且只有在第二个文件中没有数字 1 的情况下,我才想打印第一列中的值,即
3
5
10
我知道要打印第一列,我可以使用
awk '{print $1}' fileInput >> fileOutput
是否有可能在某处有一个 if 块?
通常,您只需要指出您不想匹配的模式:
awk '! /pattern/' file
在这种特定情况下,如果要打印第二列不是"1."的第一行,您可以说:
$ awk '$2 != "1." {print $1}' file
3
5
10
完成条件后,将执行{print $1}
,以便您将拥有文件的第一列。
在这种特殊情况下,由于1
的计算结果为 true
,而0
的计算结果为 false
,因此您可以执行以下操作:
awk '!$2 { print $1 }' file
3
5
10
{ }
前面的部分是执行命令的条件。在这种情况下,!$2
表示not
第 2 列是true
的(即第 2 列是false
)。
编辑:即使有尾随点,情况仍然如此。事实上,这三种解决方案都有效:
bash-4.2$ cat file
3 0.
5 0.
4 1.
3 1.
10 0.
bash-4.2$ awk '!$2 { print $1 }' file # treat column 2 as a boolean
3
5
10
bash-4.2$ awk '$2 != "1." {print $1}' file # treat column 2 as a string
3
5
10
bash-4.2$ awk '$2 != 1 {print $1}' file # treat column 2 as a number
3
5
10