たとえば、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