私は巨大なテキストファイルを持っており、各行に値またはテキストパターンが含まれています。
各パターン間の平均値または少なくとも合計値をどのように見つけることができますか?
awk / sedまたはperlソリューションがありますか?
例:
pattern1
200
300
pattern2
200
100
200
pattern3
pattern4
予想出力:
pattern1
250
pattern2
166
pattern3
pattern4
答え1
Awk
方法:
awk '/pattern/{ if (cnt) { printf "%d\n", sum/cnt; sum=cnt=0 } print }
/^[0-9]+$/{ sum += $1; cnt++ }' file
出力:
pattern1
250
pattern2
166
pattern3
pattern4
答え2
Gnuツールsed n dcを使用すると、次のことができます。
$ sed -re '
/^[0-9]+$/,/pattern/!b
/^[0-9]+$/{H;d;}
x;y/\n/ /
s#.*#dc -e "0dsn&[+ln1+snz1<+]s+l+xln/p"#ep
z;x
' file
結果:
pattern1
250
pattern2
166
pattern3
pattern4
末尾の行は数字にすることはできません。また、負の数がないとします。
パターン化したい数だけを含む行を見つけるためにsedに範囲を設定しました。それ以外の場合は、すべてがそのまま印刷されます。数値はHold ndに追加され、平均はgnu sedのs / / / eコマンドを使用してdcユーティリティを使用して計算されます。