最初のフィールド値が400より大きい場合は、各テキストファイルの行を削除します。

最初のフィールド値が400より大きい場合は、各テキストファイルの行を削除します。

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 < 401trueと評価された行のみを出力するように動作します。

awkが各ソースファイル(.bakファイル拡張子など)を変更する前にバックアップするようにするには、awkのINPLACE_SUFFIX変数を使用できます。

 awk -i inplace -v INPLACE_SUFFIX=.bak '$1 < 401' ./*.txt

注:内部編集オプション(およびsedperlを含む他のプログラムとは異なり、GNU awkのオプションは、次の引数で指定されたgawkライブラリを含む...ieの略です。このライブラリ(「inplace」と呼ばれる)は内部編集機能を提供します。-i-i--include

おすすめ記事