列のすべての行が$ VAR1または$ VAR2の場合にのみ、列全体を識別して削除します。

列のすべての行が$ VAR1または$ VAR2の場合にのみ、列全体を識別して削除します。

「行のすべての列が$ VAR1または$ VAR2の場合にのみ、行全体を削除してください」という質問に似ています。

ただし、列全体を削除し、列の各行構成に基づいています。

列と行番号が常に変更されるテキストファイルがあり、その列の各行が$ VAR1または$ VAR2と等しい場合にのみ、txtファイルからすべての列を削除します。たとえば、

$VAR1="X" と $VAR2="N" と仮定すると、$VAR1 と $VAR2 が列全体を構成するすべての列を削除したいと思います。

これが私の入力になります:

hajn 32 ahnnd namm X 543 asfn F
namd 90 jsnfu namm X 098 asfn S
5739 dw 32eff Sfff N asd 3123 1

これが私が望む結果です。

hajn 32 ahnnd namm 543 asfn F
namd 90 jsnfu namm 098 asfn S
5739 dw 32eff Sfff asd 3123 1

ループを使用してこの問題を解決できますが、これを行う強力な一行方法があるかどうかを知りたいです。可能な限りawkを使用することをお勧めします。

ベストアンサー1

これを見てください。

$ cat data
hajn 32 ahnnd namm X 543 asfn F
namd 90 jsnfu namm X 098 asfn S
5739 dw 32eff Sfff N asd 3123 1

if式および/または式と一緒にawkを使用し||、その場合はcloumn#5を除いて残りのデータを印刷します。

$ awk '{ if ($5=="X" || $5=="N") { $5=""; print } }' < data
hajn 32 ahnnd namm  543 asfn F
namd 90 jsnfu namm  098 asfn S
5739 dw 32eff Sfff  asd 3123 1

おすすめ記事