2011-09-15 11 views
0

ディレクトリを使用して、ファイル内に複数のバージョン番号を持つ複数のファイルがあります。私はこれらのバージョン番号のためにディレクトリ内の各ファイルをグリッピングしています。最新のバージョン番号を取得するためにそれらをソートし、それを最後のバージョン番号のみに '末尾-1'にパイプします。文字NのN番目の出現までのデータを返す

FILE1:空自ごみ1.2.4.1 garbagetext

FILE2空自:ガベージasdfsda 4.3.2.10 fdsaf

などfsdaf

データは次のようになります。私はすでに最新のバージョン番号の抽出を完了しました。私はこれを次のようにしました:

grep -o '[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}' * | sort | tail -1 

次の部分は私が問題を抱えています。私は最初の期間の前に番号を抽出しようとしています(それが1文字か2文字かに関わらず)。それから私は、少し異なるコマンドで同じことをすると仮定していますが、最初の期間の後の数字についてはそうです。そして、第2の期間の後、最後に第3の期間の後に再び。

私はsedやawkに関する経験はほとんどありませんが、少しの研究の結果、これらのツールのいずれかがこれを達成する方法であると私は信じています。

ありがとうございました!

編集:うん、私はそれを得たが、これははるかに簡単な方法で行うことができます。

1P、3P、4P -n
grep -o '[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}' * | sort | tail -1 | grep -o '[0-9]\{1,\}' | sed -n 2p 

やsedの私が欲しいどの値に応じて:私は何を持っていることは、以下です。

+0

最初に2つの数字があると失敗することがあります。例えば12.3.4.555および3.4​​.5.77。私はあなたのgrep | sort | tailがあなたに最新のバージョンではない、後のものを与えると思います。 – Kent

答えて

1

最新のバージョン番号を取得する:数字を抽出するために

grep -P -o "\d+\.\d+\.\d+\.\d+" * |sed 's/.*://g'|awk -F'.' '{v[$0]=($1"."$2$3$4)+0;}END{m=0;for(x in v)if(v[x]>m){m=v[x];n=x;}print n}' 

を:

kent$ echo "10.2.30.4"|awk -F'.' -v OFS="\n" '$1=$1'  
10 
2 
30 
4 

あなたは2本のラインを置くことができます。バージョン番号を抽出するために

0

は、その中でどのように多くのドット知らなくても、私は(あなたが--version-sortオプションで、GNUの並べ替えを持っていると仮定)

grep -o '[0-9.]\+' filename | sort --version-sort | tail -1 

を使用することになり

だけで取得するにはメジャーバージョン番号、上記のパイプを

sed 's/\..*//' 
while read line; do echo ${line%%.*}; done 
関連する問題