「結合」でフィールドの順序を維持する

「結合」でフィールドの順序を維持する

次の2つのファイルがあるとしましょう。

1   a   one ...
2   b   two ...
3   c   three   ...
4   d   four    ...
5   e   five    ...
6   f   six ...

そして

a
c
f

どのような方法がありますか?ファイル1の列数がわかりません。(または各フィールドを繰り返す代わりに)結合を使用して一致する行を取得できます。

1   a   one ...
3   c   three   ...
6   f   six ...

頑張った

join -1 2 -o 1.0 file1 file2

あなたが書いたように、$0すべてのフィールドを取得します。awkしかし、私は明らかにそれを得ますinvalid field number

ベストアンサー1

順番に印刷するフィールドを選択するか、すべてのフィールドをデフォルトの順序で印刷できます。ただし、「残りのフィールド」は印刷できません。

からman join

-o FORMAT
       obey FORMAT while constructing output line
[...]
Any FIELD is a field number counted from 1. FORMAT is one or
more  comma or blank separated specifications, each being
'FILENUM.FIELD' or '0'.

awkを使用できます。

awk -v regex="$(head -c -1 file2 | tr '\n' '|')" '$2 ~ regex' file1
  • file2 の最後の改行文字を削除して改行文字を「|」に置き換えると、正規表現は次のようになります。a|c|f
  • file1の2番目のフィールドをこの正規表現と一致させます。

または、特にfile2に特殊文字が含まれている場合は、Sundeepのawkソリューションを使用してください。

おすすめ記事