これは入力ファイルの 1 行です。
フーバー 0.40 0.20 0.40 0.50 0.60 0.80 0.50 0.50 0.50 -43.00 100010101101110101000111010
そして、特定の位置が 13 列目の「1」または「0」であるかどうかをチェックする awk コマンドは、次のようになります。
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
値変数は機能しますが、上記の例では、最初のビットが「1」に等しいかどうかを確認したいだけです。
編集
わかりましたので、私の質問はあまり明確ではなかったと思います。substr メソッドの「$13」は、実際にはビット文字列です。したがって、この awk は、列「$13」のビット文字列の位置「1」に「1」がある foo.txt 内のすべての行を渡したいと考えています。これが物事を明確にすることを願っています。
編集2
わかりました、それを本当に簡単に分解しましょう。上記のコードは例であるため、入力行は多くの行の 1 つです。したがって、すべての行の位置 8 に 1 があるわけではありません。特定の位置に両方の出現があるかどうかを再確認したので、いずれにしても何らかの出力が得られるはずです。問題は、すべての行で、選択した位置に「1」が見つからないということですが、「0」を見つける必要があると言うと、すべての行が返されます。