打印第一列和第四列不同的行
Print lines whose 1st and 4th column differ
我有一个包含以下形式的行的文件:
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 列不同的行(列以 space 分隔)(值 AAA
和 BBB
是固定的) .我知道我可以通过在第一列中获取所有可能的值然后使用来做到这一点:
for i in $values; do
cat file.txt | grep "^$i" | grep -v " $i BBB"
done
但是,这在文件中运行的次数与第一列中出现的不同值的次数一样多。有没有办法只通过一次就可以做到这一点?我想我可以进行比较,我的主要问题是我不知道如何提取 space 分隔的列。
这对于 awk
来说是非常简单的事情:
awk ' != ' file
使用 awk
,您使用 </code> 引用第一个字段,使用 <code>
引用第二个字段,依此类推。这样,你就可以将第一个和第四个与 !=
进行比较。如果这是真的(即 </code> 和 <code>
不同),awk
执行它的默认操作:打印当前行。
对于您的示例输入,这有效:
$ awk ' != ' file
18 AAA 781 12 BBB beta^16 - 5*beta^15
请注意,您可以使用 -v FS="..."
定义不同的字段分隔符。这样,您可以告诉 awk
您的行包含制表符/逗号/ ... 分隔的字段。总的来说就是这样:awk -v FS="\t" ' != ' file
.
我有一个包含以下形式的行的文件:
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 列不同的行(列以 space 分隔)(值 AAA
和 BBB
是固定的) .我知道我可以通过在第一列中获取所有可能的值然后使用来做到这一点:
for i in $values; do
cat file.txt | grep "^$i" | grep -v " $i BBB"
done
但是,这在文件中运行的次数与第一列中出现的不同值的次数一样多。有没有办法只通过一次就可以做到这一点?我想我可以进行比较,我的主要问题是我不知道如何提取 space 分隔的列。
这对于 awk
来说是非常简单的事情:
awk ' != ' file
使用 awk
,您使用 </code> 引用第一个字段,使用 <code>
引用第二个字段,依此类推。这样,你就可以将第一个和第四个与 !=
进行比较。如果这是真的(即 </code> 和 <code>
不同),awk
执行它的默认操作:打印当前行。
对于您的示例输入,这有效:
$ awk ' != ' file
18 AAA 781 12 BBB beta^16 - 5*beta^15
请注意,您可以使用 -v FS="..."
定义不同的字段分隔符。这样,您可以告诉 awk
您的行包含制表符/逗号/ ... 分隔的字段。总的来说就是这样:awk -v FS="\t" ' != ' file
.