2017-02-07 11 views
0

最初の列は同じ値ですが、2番目の列が異なる行の数は、シェルスクリプトまたはawkを使用して計算します。 ファイルは1つの列値を持つ行の数が一致しています

したがって
400.00  1234 
400.00  2134 
400.05  4314 
400.05  9766 

で構成されて2,2、...... uniqの集計オプションを使用してはどう

答えて

0

あるべきカウント:これは最初であることを前提としてい

$ awk '{print $1}' inputfile | uniq -c 
     2 400.00 
     2 400.05 

すべての同一の値が順次表示されます。これが当てはまらない場合は、数値入力でソートしてからawkにパイプすることができます。

+1

は '私が計算したい、他のユーティリティは必要ありません、このために十分であろう最初の列では同じ値を持ち、2列目では異なる行の数 '私はあなたのawk | uniqがそれをしないと思います。 – Kent

+0

@Kent問題は少し不明です。明らかに私の提案された解決策は受け入れられたので、それがすべきことをしています。 – Jens

+0

列の値400.00に2つのレコードがあり、これらの2つのレコードで構成されるファイルを作成するとします。同様に、値400.50、.......のファイルを作成する必要があります。 –

0

これはおそらく動作します:

sort <file> | uniq | awk '{print $1}' | uniq -c 

内訳:

sort | uniq # Eliminates duplicate entries and sorts things for uniq calls 

次へ:

0123最後に

awk '{print $1}' # Extract the first column 

0

ご入力ファイルがソートされているかどうか、このawkはワンライナーは、あなたのために関係なく、それを計算します:

awk '{a[$1]+=($0 in b)?0:1;b[$0]}END{for(x in a)print x":"a[x]}' file 

私はいくつかのDUPの値含むように、少しあなたの入力を変更:

kent$ cat f 
400.00  1234 
400.00  1234 
400.00  1234 
400.00  2134 
400.05  4314 
400.05  9766 

kent$ awk '{a[$1]+=($0 in b)?0:1;b[$0]}END{for(x in a)print x":"a[x]}' f 
400.05:2 
400.00:2 
1
単体だけで awk

awk '{unique[$1]++}END{for (i in unique) print i,unique[i]}' fileabc 
400.05 2 
400.00 2 
+0

'最初の列は同じ値だが2列目は違う行の数を計算したいと思う ';-) $ 2も何とかチェックするべきだと思いますが、どう思いますか? – Kent

+0

@Kent:OPの入力はそれを正当化しません:) – Inian

関連する問題