同じディレクトリにtext1.txt、text2.txt、...、text100.txtという100のテキストがあるとします。各テキストから特定の行(最初の100行)を抽出し、この行を別の新しい100行のテキストに別々に保存したいと思います。各新しいテキストには100行があります。。
わかりましたhead -100 text1.txt > text1_new.txt
…head -100 text2.txt > text2_new.txt
できます。しかし、端末から両方を抽出するより効率的な方法はありますか?
ありがとうございます! !
答え1
一つの方法は
find . -name "text*.txt" -type f -print0 | xargs -0 -I{} sh -c 'f="{}"; head -100 "$f" > "${f%.txt}_new.txt"'
find . -name "text*.txt" -type f
ディレクトリ内のすべてのテキストファイルを探す-print0
スペースを保存するために、ヌル文字でファイルパスを印刷します。xargs -0
NULLで終わるパラメータを受け入れます。-I{}
パラメータとして使用するプレースホルダsh -c
コマンド文字列を使用してダッシュを実行するf="{}"
パラメータを変数に保存f
head -100 "$f"
ヘッダーコマンド"${f%.txt}_new.txt"
パラメータの「.txt」を「_new.txt」に置き換えます。
答え2
ファイルを繰り返すことができます。
for f in *.txt
do
head -n100 "$f" > "${f%.txt}_new.txt"
done
一致するすべてのファイルを一覧表示するために到着時に展開*.txt
されます。このスクリプトを(部分的または完全に)実行した場合、一部の結果ファイルも一致します。解決策は、実行する前に削除するrm *_new.txt
か()パターンを締めることです。