第1列和第4列不同的打印行

时间:2015-01-12 14:06:27

标签: shell search grep multiple-columns

我有一个包含这种形式的行的文件:

12 AAA 423 12 BBB beta^11 + 3*beta^10
18 AAA 1509 18 BBB -2*beta^17 - beta^16
18 AAA 781 12 BBB beta^16 - 5*beta^15

现在我想只打印第1列和第4列不同的行(列以空格分隔)(值AAABBB是固定的)。我知道我可以通过在第一列中获取所有可能的值然后使用:

来实现
for i in $values; do
  cat file.txt | grep "^$i" | grep -v " $i BBB"
done

但是,这会在第一列中显示多少个不同值的次数。有没有办法如何只在一次通过?我想我可以进行比较,我的主要问题是我不知道如何提取空格分隔的列。

1 个答案:

答案 0 :(得分:2)

对于awk来说,这是非常简单的事情:

awk '$1 != $4' file

使用awk,您可以使用$1引用第一个字段,使用$2引用第二个字段,依此类推。这样,您可以将第一个和第四个与$1 != $4进行比较。如果这是真的(即$1$4不同),awk会执行默认操作:打印当前行。

对于您的样本输入,这有效:

$ awk '$1 != $4' file
18 AAA 781 12 BBB beta^16 - 5*beta^15

请注意,您可以使用-v FS="..."定义不同的字段分隔符。这样,您可以告诉awk您的行包含字段tab /逗号/ ...已分隔。所有这些都是这样的:awk -v FS="\t" '$1 != $4' file