Ubuntuシステムから約20,000個のtxtファイルを読み取り、次のように各ファイルの最初の行を新しいtxtファイルに挿入する必要があります。
Filename1.txt | FirstLineoftheFilename1.txt
Filename2.txt | FirstLineoftheFilename2.txt
Filename3.txt | FirstLineoftheFilename3.txt
sed
コマンドを試しましたが、最初の行を印刷できます。
次のfind
コマンドは正しいファイルを識別します。
find /db/users/logs/ -name '*.txt' -exec sed -n '1p' {} \; -exec basename {} \;
しかし、出力を1行にまとめて印刷する方法がわかりませんfind
。sed
助けが必要ですか?
よろしくお願いします!
ベストアンサー1
GNUを使用できますawk
。
LC_ALL=C find /db/users/logs/ -name '*.txt' -type f -exec gawk '{
f = FILENAME; sub(".*/", "", f)
print f" | "$0; nextfile}' {} +
またはperl
:
LC_ALL=C find . -type f -name '*.txt' -exec perl -lne '
print $ARGV =~ s:.*/::r . " | $_"; close ARGV' {} +
またはシェル:
LC_ALL=C find /db/users/logs/ -type f -name '*.txt' -exec sh -c '
for file do
<"$file" IFS= read -r line || [ -n "$line" ] &&
printf "%s\n" "${file##*/} | $line"
done' sh {} +
sh
(この方法は、最初の行にNUL文字が含まれている場合、ほとんどの実装では正しく機能しません。テキスト文書)。