我有一个包含这种形式的行的文件:
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列不同的行(列以空格分隔)(值AAA
和BBB
是固定的)。我知道我可以通过在第一列中获取所有可能的值然后使用:
for i in $values; do
cat file.txt | grep "^$i" | grep -v " $i BBB"
done
但是,这会在第一列中显示多少个不同值的次数。有没有办法如何只在一次通过?我想我可以进行比较,我的主要问题是我不知道如何提取空格分隔的列。
答案 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
。