使用awk排除定义模式

时间:2014-04-01 12:56:47

标签: bash awk

我有一个包含两列的文件,并且只有在第二列中找不到确定的模式时才想打印第一列,例如文件可以:

3   0.
5   0.
4   1.
3   1.
10  0.

我只想在第二个文件中没有数字1的情况下打印第一列中的值,即

3
5
10

我知道打印我可以使用的第一列

awk  '{print $1}' fileInput >> fileOutput

是否可以在某个地方设置if块?

2 个答案:

答案 0 :(得分:3)

您可以添加条件$2 != "1."以检查第二列是否为1.

$ awk '$2 != "1." {print $1}' file
3
5
10

完成条件后,将执行{print $1},以便您拥有该文件的第一列。

答案 1 :(得分:2)

在这种特殊情况下,因为1评估为true0评估为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