テキストファイルがあります(例:)。
apple V$NFY_Q6_rc V=0.741
apple V$HOXA7_01_rc V=0.454
apple V$ALPHACP1_01_rc V=0.695
orange V$SP4_Q5 V=0.747
grapes V$SP1_Q2_01 V=0.677
grapes V$SP1_Q6_01_rc V=0.685
grapes V$SP1_Q6_rc V=0.884
各果物について、最も高いV値を持つ行(列3)を抽出したいと思います。私の出力は次のようになります。
apple V$NFY_Q6_rc V=0.741
orange V$SP4_Q5 V=0.747
grapes V$SP1_Q6_rc V=0.884
異なるサブディレクトリには、このようなファイルが複数あります。
サブセットを作成したら、次のコードを使用して、列2で特定の文字列が発生した回数を取得します。
perl -lanE '$str=$F[1]; $f="/home/$str/list/$str.txt"; $c=`grep -c "$str" "$f"`;chomp($c);$x=0;$x++ if $c;say "$str\t$x\t$c"' file2
これにより、次のような出力が生成されます。ファイルの列2から文字列「SP4」を検索するとします。
X X in file? number of times it occurs
NFA 0 0
SP4 1 2
NFATC1 0 0
V値が必要です(上記の値はこの表に含まれています)
X X in file? number of times it occurs V value
NFA 0 0
SP4 1 2 0.747
NFATC1 0 0
PS:介入するPerlプログラムの詳細については、次のリンクを参照してください。
http://stackoverflow.com/questions/23109490/search-for-occurrence-of-a-string-in-another-file-in-a-particular-column
ベストアンサー1
順序が重要でない場合は、2回通過するだけsort
です。最初のステップでは、フィールド1を基準に並べ替え、フィールド3の数値部分(位置4から始まる)に基づいて逆順に並べ替えます。この-b
修飾子は先行スペースを無視するようにします。このパイプを 2 番目のパイプに渡し、sort
フィールド 1 の固有値ごとに 1 つのレコードを返します。ただし、今回は安定したsort(-s
)修飾子を指定して、フィールド3(各値までバブリング)で最も高い値を持つレコードを保証します。フィールド1、前のソートを返す)
sort -k1,1 -k3.4b,3nr file.txt | sort -k1,1 -s -u
apple V$NFY_Q6_rc V=0.741
grapes V$SP1_Q6_rc V=0.884
orange V$SP4_Q5 V=0.747