列2の値と列3の値を行間で比較しようとしています。比較は、同じ行の2列目と3列目の値の比較ではありません。比較のための 条件は比較値は同じ文字列に関連付けられます
(1)1行のCOL2の値がこれらの行は、列の同じ文字列を有する別の行におけるCOL 3の値と比較される1
(2)列1の文字列が少なくとも2回繰り返される場合にのみ比較されます。
(3)カラム2の値が異なる行の列3の値よりも大きい場合、両方の行が列1に
を同じ文字列を有する場合、例えば入力ファイルがある:
john 0 100 john 120 200 smith 1 400 claris 300 500 claris 510 700 claris 300 500 dexter 10 400 dexter 100 300 sam 200 300 sam 310 500 tom 100 300 bruce 200 500 bruce 520 900
望ましい出力
john 0 100 john 120 200 claris 300 500 claris 510 700 claris 300 500 sam 200 300 sam 310 500 bruce 200 500 bruce 520 900
col1の 'dexter'の行は印刷されません。 'dexter'は2行で表示されますが、col2の値は他の行のcol3の値よりも小さくなります。つまり、10は300未満、100は400未満です。 2列目のブルースは520のcol2を持ち、もう1つの行のcol3の500よりも大きいためです。
awkで試したところ、以下の例があります。私は最初だけ繰り返し行を印刷した後、関連する値を比較することにより、私はまた、工程で、それに試み
awk -F "\t" 'NR==FNR{a[$1]++; b[$1]=$2; c[$1]=$3;next} {for (i in b) if (a[$1] >2 && b[i]>c[i]) print}' test.file test.file
COL1に同じ文字列を有する別の行にCOL3でCOL2を比較把握することができないように見えます。 同じ文字列に関連付けられた値を比較する方法を理解できません。
は、なぜあなたはあなた*のtest.fileは、コマンドラインで、* 2回に対処したのか?私はどのルールが* dexter *を保つのか分からない!あなたは書きました:列2の*値が列3 *の値よりも大きいですが、私はあなたのサンプルでこれに一致する行が1つも見当たりません。 –
なぜファイルを2回置くのか理解していますが、@ F.Hauriの他の質問は非常に重要です:_どのルールが脱調していますか?_「あなたは書きました:列2の値が列3の値よりも大きいです。あなたのサンプルで、これにマッチする1行を参照してください。 " – jas
少なくとも2回繰り返される列1の文字を出力するには、arrayを使用してファイルを2回渡します。より多くの方法があると私は同意します。元の質問ではっきりしないと申し訳ありません。列1の同じ文字列に関連付けられている場合に限り、列2と3の値を行間で比較する必要があります。 – Amit