0

私はAWKの(非常に)基本的な理解を持っています。これを行ういくつかの方法を試しましたが、すべてが必要以上に多くの行を出力します:

に10行ありfile.1ます:

chr10   234567
chr20   123456
...
chrX    62312

大文字に移動して の最初の 2 列と一致させたいfile.2ので、下の 1 行目は上の 2 行目に一致しますが、位置については上の 3 行目に一致するが chr には一致しない下の 2 行目を取得したくありません。下の最初の行が上の最初の行と一致するようにします。

CHR20   123456    ...   234567 
CHR28   234567    ...   62312

私は持っている:

$ cat file.1 | tr '[:lower:]' '[:upper:]' | <grep? awk?>

続行する方法を知りたいです。以前は単純なgrepを使用していましたがfile.1、検索されたファイルで2番目の列がより多く一致するため、数百行が返されます。最初の 2 列で一致させたいだけです (これらは の最初の 2 列に対応しますfile.2)。

それがあなたにとって十分に明確であることを願っています、あなたの答えを楽しみにしています=)

4

1 に答える 1

4

ファイルが最初の列でソートされている場合は、次のことができます。

join -i file.1 file.2 ¦ awk '$3==$2{ $3=""; print}'

並べ替えられていない場合は、最初に並べ替えます。

-iフラグは、大文字と小文字を区別しないように指示します。

最初の列に同じフィールドを持つ複数の行がある場合、これは機能しません。その作業を行うには、より複雑なものが必要になります

于 2012-10-09T09:28:25.660 に答える