テキストファイルの値をすばやく比較

テキストファイルの値をすばやく比較

2つの列を持つテキストファイルがあり、最初の列は名前で、2番目の列は時間値です。良い:

cat  34M
dog  34M
fish 12M
ant  34M

同じ値に対して2番目の列を比較する必要があり、1が残りの列と異なる場合は、その項目を表示したいと思います。したがって、この場合は他の魚とは異なるため、タグを付ける必要があります。ファイルは動的でフォルダごとにforループを介して変更されるため、私のスクリプトはforループで比較を実行する必要があります。

for FOLDER in is find ${DIR}/ -maxdepth 1 -type f -name values.txt`; do
<something to flag the 'odd' value>
done

2番目の列を最初にソートしてから、最初の(最も高い)値をメインマークとして比較する必要があると思います。ファイルには、2つ以上の「奇数」値を含めることができます。ファイルには2〜500項目を含めることができます。添え字やawkで何かできますが、どこから始めるべきかわかりません。

助けてくれてありがとう。

ベストアンサー1

値がメモリに収まる場合、「最大500」は次のようになり、必要に応じてawkたぶん可能かもしれません。1つのステップで(少なくともほとんど)1つのプロセスで。

一度発生するすべての値(複数の値がある場合)を順序に関係なく一覧表示します。

awk '!n[$2++]{a[$2]=$1} END{for(v in n)if(n[v]==1)print a[v],v}'
# can pipe output to a suitable sort if you want a specific order
# or for GNU awk 4, you can get several non-arbitrary orders
# (less than GNU sort) using PROCINFO["sorted_in"] see the manual

一度発生する値をリストします(少なくとも1つある場合)。

awk '!n[$2++]{a[$2]=$1} END{for(v in n)if(n[v]==1){print a[v],v;exit}}'

一度発生し、それ以外の場合は存在しない値をリストします。

awk '!n[$2++]{a[$2]=$1} END{for(v in n)if(n[v]==1){print a[v],v;exit};print "no unique entry"}'

おすすめ記事