1

这是输入文件的一行:

FOO 酒吧 0.40 0.20 0.40 0.50 0.60 0.80 0.50 0.50 0.50 -43.00 100010101101110101000111010

还有一个 awk 命令,它检查第 13 列中的某个位置是否为“1”或“0”,例如:

 awk -v values="${values}" '{if (substr($13,1,1)==1) printf values,$1,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13}' foo.txt > bar.txt

values 变量有效,但我只想在上面的示例中检查第一位是否等于“1”。

编辑

好的,所以我想我的问题不是很清楚。substr 方法中的“$13”实际上是位串。因此,这个 awk 想要传递 foo.txt 中在“$13”列的位串“1”位置具有“1”的所有行。希望这可以澄清事情。

编辑 2

好的,让我很容易地分解它。上面的代码是示例,因此输入行是许多行之一。因此,并非所有行在位置 8 处都有 1。我已经仔细检查了某个位置是否同时出现了两种情况,因此无论如何我都应该得到一些输出。问题是在所有行中,它在我选择的位置上都找不到任何“1”,但是当我说它必须找到一个“0”时,它会返回所有行。

4

1 回答 1

2
$ cat file
FOO BAR 0.40 0.20 0.40 0.50 0.60 0.80 0.50 0.50 0.50 -43.00 100010101101110101000111010
FOO BAR 0.40 0.20 0.40 0.50 0.60 0.80 1.50 1.50 1.50 -42.00 100010111101110101000111010

$ awk 'substr($13,8,1)==1{ print "1->"$0 } substr($13,8,1)==0{ print "0->"$0 }' file
0->FOO BAR 0.40 0.20 0.40 0.50 0.60 0.80 0.50 0.50 0.50 -43.00 100010101101110101000111010
1->FOO BAR 0.40 0.20 0.40 0.50 0.60 0.80 1.50 1.50 1.50 -42.00 100010111101110101000111010
于 2010-04-19T13:13:27.437 回答