1

.1 .2サイズ制限があるため、 で終わるログ ファイルがあります。

たとえば、私のログ ディレクトリには次のようなファイルがあります。 log20121212 log20121212.1 log20121212.2

同じログ日付のファイルを 1 つのファイルに結合したいが、順序は逆です。たとえば、結合されたファイルでは、 の内容は のlog20121212.2内容の前にlog20121212.1、 の内容は の内容のlog20121212.1前に来る必要がありlog20121212ます。

ただし、異なる日付のファイルは別のファイルに結合されます。たとえば、ファイルにlog20121212.1結合する必要がありますが、ファイルに結合する必要があります。log20121212log20121213.1log20121213

これを行う方法はありますか?

4

5 に答える 5

0
shopt -s extglob
tmp=$(mktemp)
for f in log+([0-9]); do
    cat "$f"{.2,.1,} > $tmp && mv $tmp "$f"
done
于 2013-06-07T00:22:34.470 に答える
0

テストされていない純粋な bash ソリューション

for f in log*; do
  base="${f%%.*}" # base name for this log, without the .1 part
  >> "${base}-final" # make sure the file exists
  cat "$f" "${base}-final" > tmp # use mktemp to create this file if you want to be secure
  mv tmp "${base}-final"
done
于 2013-06-06T20:12:43.197 に答える
0

Ansgar Wiechers の修正版。各ログ ファイルの行の順序も逆になっています (最近のログ情報を最初に出力することを意図しているようです)。

ls -1 log* | sort -r | \
while read file ; do
    tac "$file" >> "${file%.*}_out"
done
于 2013-06-06T19:59:30.120 に答える
0

ログ ファイルの名前を指定する場合:

$ ls -1 log20121212.* | sort -t1 -k2 -r
log20121212.4
log20121212.3
log20121212.2
log20121212.1

すべてのログ ファイルを並べ替える場合:

$ ls -1 log* | sort -n | sort -t1 -k2 -r
log20121213.2
log20121213.1
log20121212.4
log20121212.3
log20121212.2
log20121212.1
log20121211.2
log20121211.1
于 2013-06-06T19:50:18.927 に答える