ファイルにすべてのNULL値を含む列を表示しない方法

ファイルにすべてのNULL値を含む列を表示しない方法

たとえば、5つの列を持つファイルがあります(Sybase選択クエリの結果をリダイレクトして取得します)。各列はタブ文字で区切られます。すべてのNULL列をフィルタリングする必要があります。 5つの列のうちの1つでも空にすることができます。

たとえば、ファイルの列が次のような場合:

1000    NULL    NULL    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL
7       NULL    1000    2       NULL

出力は(列2と5を削除した後)可能な限り同じファイルになければなりません。

1000    NULL    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2    
7       1000    2 

私は着いた:

for i in {1..5}  
do
echo $i
dlr="$"$i
str="{print $dlr}"
echo $str
awk '$str' <input_file> | while read value
    do
        echo $value

        if [ "$value" == "NULL" ]
        then
                echo "inside"
                cut $i 
        fi
    done
done

現在の値はすべての行を表示します!そして、柱を切る方法もわかりません。私はシェルスクリプトの初心者ですが、続行できません。

これを行う方法を提案できますか?

ベストアンサー1

の助けを借りてGNUユーティリティdatamash、最初に行を反転してから、すべての空の行を削除し、再び行を反転します。

$ datamash transpose | sed -Ee '/^(NULL\t)*NULL$/d' | datamash transpose 

おすすめ記事