txtファイルが多すぎます。各 txt ファイルの形式は次のようになります。
200 0.2 0.1 0.5 0.4
500 0.4 0.9 0.9 0.1
最初のフィールド値が400を超える各txtファイルのすべての行を削除しようとしています。したがって、上記のファイルには次の内容のみを含める必要があります。
200 0.2 0.1 0.5 0.4
パスワード
for file in *.txt; do
echo "$(awk '{ if ($1 < 401) print }' *.txt)" > tmp && mv tmp *.txt
done
rm -f tmp
ただし、これはすべてのファイルを次のテキストファイルに移動するため、機能しません。
ベストアンサー1
GNU awk(Linuxを使用している場合はほぼ確実です)を使用している場合は、GNU awkの内部編集ライブラリを使用できます。for
これを行うためにシェルループや一時ファイルも必要ありません。
awk -i inplace '$1 < 401' ./*.txt
これにより、各テキストファイルからフィールド1> 400のすべての行が削除されます。まず、GNU awkinplace
ライブラリをロードしてから$1 < 401
trueと評価された行のみを出力するように動作します。
awkが各ソースファイル(.bakファイル拡張子など)を変更する前にバックアップするようにするには、awkのINPLACE_SUFFIX変数を使用できます。
awk -i inplace -v INPLACE_SUFFIX=.bak '$1 < 401' ./*.txt
注:内部編集オプション(およびsed
)perl
を含む他のプログラムとは異なり、GNU awkのオプションは、次の引数で指定されたgawkライブラリを含む...ieの略です。このライブラリ(「inplace」と呼ばれる)は内部編集機能を提供します。-i
-i
--include