フォルダ内のすべてのファイルの最初の行と最後の行を印刷します。

フォルダ内のすべてのファイルの最初の行と最後の行を印刷します。

file.log.1上書きされたログファイル(など)がたくさんありますfile.log.2。デバイスからローカルコンピュータにコピーすると、元のタイムスタンプが失われました。だから時間順にまとめたいです。問題は、何が最新で、何が最も古いものであるかは必ずしもわからないということです。

私が望むのは、すべてのログが1つのディレクトリにある場合は、次のように印刷することです。

file: file.log.1
first line: [first line that isn't whitespace]
last line: [last line that isn't whitespace]

これを行うにはPythonスクリプトを書くことができますが、可能であればLinux組み込みスクリプトを使用することをお勧めします。 awk/sedのための仕事ですか?それとも、これは実際にスクリプト言語に適していますか?答えが「はい」の場合、awk / sedは何をしますか?

検索でこのawkコマンドを見つけましたが、ファイル名のみを受け入れ、最後の行の内容を印刷します(そして最後に可変数の空白行があるかもしれません)。

awk 'NR == 1 { print }END{ print }' filename

ベストアンサー1

だから私はsedこの答えが好きです。

for file in file.log.*
do
   echo "file: $file"
   echo -n "first line: "
   cat "$file" | sed -n '/^\s*$/!{p;q}'
   echo -n "last line: "
   tac "$file" | sed -n '/^\s*$/!{p;q}'
done

おすすめ記事