列と行番号が常に異なるテキストファイルがあり、そのファイルの各列が$ VAR1または$ VAR2と等しい場合にのみ、txtファイルから行全体を削除します。たとえば、
$VAR1="X" と $VAR2="N" と仮定すると、$VAR1 と $VAR2 が列全体を構成する行を削除したいと思います。
これが私の入力になります:
hajn 32 ahnnd namm 5 543 asfn F
X X N X X X N X
5739 dw 32eff Sfff 3 asd 3123 1
これが私が望む結果です。
hajn 32 ahnnd namm 5 543 asfn F
5739 dw 32eff Sfff 3 asd 3123 1
ループを使用してこの問題を解決できますが、これを行う強力な一行方法があるかどうかを知りたいです。可能な限りawkを使用することをお勧めします。
ベストアンサー1
$ VAR1=N
$ VAR2=X
$ awk -v a="$VAR1" -v b="$VAR2" '{ for (i=1; i<=NF; ++i) if ($i != a && $i != b) { print; next } }' file
hajn 32 ahnnd namm 5 543 asfn F
5739 dw 32eff Sfff 3 asd 3123 1
ここでは、コマンドラインで使用できるように、値と$VAR1
短い$VAR2
スクリプトとその変数を転送します。awk
a
b
-v
スクリプト内で各行のフィールドを繰り返し、フィールドがawk
合計値と異なる場合は、行全体を印刷してすぐに次の行を続行します。a
b
a
フィールドと異なる場合、b
何も起こりません(行は印刷されません)。