2017-05-31 6 views
0

私はこのケースを扱うためのスマートな方法を探しています。類似のファイルを持つディレクトリのテール操作

cpu-0およびfhcountディレクトリの下には、いくつかの名前でグループ化することができるファイルが多数あります。

ディレクトリとファイルの鳥瞰図です。

../cpu-0/ 
     cpu-idle-01-01-2016 
     cpu-idle-02-01-2016 
     cpu-idle-03-01-2016 
     . 
     . 
     cpu-interrupt-01-01-2016 
     cpu-interrupt-02-01-2016 
     cpu-interrupt-03-01-2016 
     . 
     . 
     . 
     cpu-nice-01-01-2016 
     cpu-nice-02-01-2016 
     . 
     . 
../fhcount/ 
     file_handles-max-01-01-2016 
     file_handles-max-02-01-2016 
     file_handles-max-03-01-2016 
     . 
     . 
     file_handles-unused-01-01-2016 
     file_handles-unused-02-01-2016 
     file_handles-unused-03-01-2016 
     . 
     . 
     . 
     file_handles-used-01-01-2016 
     file_handles-used-02-01-2016 
     . 
     . 

ご覧のとおり、パターンがあります。私は関連ファイルをtailにハードコーディングして収集しました。

curdir="${PWD%}" 

tail -q -n +2 $curdir/cpu-0/cpu-idle* > cpu-idle_combined 
tail -q -n +2 $curdir/cpu-0/cpu-interrupt* > cpu-interrupt_combined 
tail -q -n +2 $curdir/cpu-0/cpu-nice* > cpu-nice_combined 

tail -q -n +2 $curdir/fhcount/file_handles-max* > file_handles-max_combined 
tail -q -n +2 $curdir/fhcount/file_handles-unused-* > file_handles-unused_combined 
tail -q -n +2 $curdir/fhcount/file_handles-used-* > file_handles-unused_combined 

私は同じことをすることができますが、今回はよりスマートですか?

+0

「$ {PWD%}」はどのように展開されるのですか?展開は空の文字列を 'PWD'の最後から削除しています。つまり何もしていないのですか? –

+0

スクリプトが置かれている現在のディレクトリに展開されます。例えばhome/scripts/ したがって、home/scripts /にはcpu-0 /とfhcountディレクトリがあります。 – Elesmoth

+0

なぜ、あなたは '%'を使っているのですか? –

答えて

1

これは、サブディレクトリ内のすべてのファイルを通過し、ファイル名の共通部分を収集し、その後、結合された出力ファイルにそれらを出力します。

#!/bin/bash 

# Required for the +(pattern) glob 
shopt -s extglob 

# Associative array used as set of unique file name roots 
declare -A roots 

# Shorten names like cpu-0/cpu-idle-01-01-2016 to cpu-0/cpu-idle 
# +([[:digit:]-]) matches digits and hyphens 
# ${fname%%pattern) removes the longest match of pattern from the end of fname 
for fname in */*; do 
    roots["${fname%%+([[:digit:]-])}"]=1 
done 

# Loop through unique roots, print to output files 
for fname in "${!roots[@]}"; do 
    tail -q -n +2 "$fname"* > "$fname"_combined 
done 

連想配列はバッシュ4.0以降が必要です。

. 
├── cpu-0 
│   ├── cpu-idle-01-01-2016 
│   ├── cpu-idle-02-01-2016 
│   ├── cpu-idle-03-01-2016 
│   ├── cpu-interrupt-01-01-2016 
│   ├── cpu-interrupt-02-01-2016 
│   ├── cpu-interrupt-03-01-2016 
│   ├── cpu-nice-01-01-2016 
│   ├── cpu-nice-02-01-2016 
│   └── cpu-nice-03-01-2016 
└── fhcount 
    ├── file_handles-max-01-01-2016 
    ├── file_handles-max-02-01-2016 
    ├── file_handles-max-03-01-2016 
    ├── file_handles-unused-01-01-2016 
    ├── file_handles-unused-02-01-2016 
    ├── file_handles-unused-03-01-2016 
    ├── file_handles-used-01-01-2016 
    ├── file_handles-used-02-01-2016 
    └── file_handles-used-03-01-2016 

の例示的な入力ファイル構造については、得られた出力構造は

. 
├── cpu-0 
│   ├── cpu-idle-01-01-2016 
│   ├── cpu-idle-02-01-2016 
│   ├── cpu-idle-03-01-2016 
│   ├── cpu-idle_combined 
│   ├── cpu-interrupt-01-01-2016 
│   ├── cpu-interrupt-02-01-2016 
│   ├── cpu-interrupt-03-01-2016 
│   ├── cpu-interrupt_combined 
│   ├── cpu-nice-01-01-2016 
│   ├── cpu-nice-02-01-2016 
│   ├── cpu-nice-03-01-2016 
│   └── cpu-nice_combined 
└── fhcount 
    ├── file_handles-max-01-01-2016 
    ├── file_handles-max-02-01-2016 
    ├── file_handles-max-03-01-2016 
    ├── file_handles-max_combined 
    ├── file_handles-unused-01-01-2016 
    ├── file_handles-unused-02-01-2016 
    ├── file_handles-unused-03-01-2016 
    ├── file_handles-unused_combined 
    ├── file_handles-used-01-01-2016 
    ├── file_handles-used-02-01-2016 
    ├── file_handles-used-03-01-2016 
    └── file_handles-used_combined 

$ head cpu-idle* 
==> cpu-idle-01-01-2016 <== 
1cpu-idle-01-01-2016 
2cpu-idle-01-01-2016 
3cpu-idle-01-01-2016 

==> cpu-idle-02-01-2016 <== 
1cpu-idle-02-01-2016 
2cpu-idle-02-01-2016 
3cpu-idle-02-01-2016 

==> cpu-idle-03-01-2016 <== 
1cpu-idle-03-01-2016 
2cpu-idle-03-01-2016 
3cpu-idle-03-01-2016 

結合された出力ファイルのような、例えば入力ファイルの内容のためのものですcontains

$ cat cpu-idle_combined 
2cpu-idle-01-01-2016 
3cpu-idle-01-01-2016 
2cpu-idle-02-01-2016 
3cpu-idle-02-01-2016 
2cpu-idle-03-01-2016 
3cpu-idle-03-01-2016 
+0

トーンありがとう!これはかなり助けになります。 – Elesmoth

+0

もし私が次のようなファイルを持っているとしたら、1つの質問があります: 'file_handles-used_combined-1-01-01-2016' ' file_handles-used_combined-2-01-01-2016' 'file_handles-used_combined-3-02- 01-2016' 'file_handles-used_combined-10-02-01-2016' 私はそれらを尾にしたくありません。どのように私はそのような行動を控えることができます。コードは数字を取り除くので、間違った動作を引き起こす可能性があると私は信じています。どうすればそれに取り組むことができますか? – Elesmoth

+1

@Elesmothこれらのファイルの動作はどうでしょうか?それらは集約ファイルと同じ名前ですが、他の場所から削除している接尾辞はありますか? –

関連する問題