柱を水平に接続します。最初の列と交差する行のみを印刷

柱を水平に接続します。最初の列と交差する行のみを印刷

たとえば、列ごとにコンテンツを出力する2つの異なるコマンドがあるとします。

$ command_1

7049857 abc fdg hsi
5409858 xxx fyy hsi
540958  abc zzz hsi
54230956  rbc sss hsi

$ command_2

7049857 0 fdg free
5409858 0 fyy free
540958  2 zzz free

x,y,z出力からインデックス付きの列を自動的に取得し、index:を使用して新しい出力を印刷したいと思いますcommand_1a,b,ccommand_2x,y,z,a,b,c

例:

出力列1そして2から:と:commmand_2の最後の列command_1

$ new_command

7049857 0  hsi
5409858 0  hsi
540958  2  hsi

私が今まで持っているもの:

私は比較に最初に触れましたが、awk次のコマンドを使用して各コマンドで対応する列を取得できることを知っていますawk

command_1 | awk '{print $x " " $y " " $z}'
command_2 | awk '{print $a " " $b " " $c}'

上記は縦に柱をつなげたものですが、横につなげなければなりません。

最初の列と交差する行のみを印刷します。

想定される行の数はcommand_2より多くても少なくてもかまいませんcommand_1。ただし、両方のコマンドの最初の列には次のものが含まれます。同じカテゴリに属する​​アイテム (上記の例のように複数桁のID)

したがって、2つのコマンドの最初の列が同じように並べ替えられ、新しい項目または欠落している項目が最後にのみ発生する可能性があると仮定すると、合計項目を含む行command_1command_2つまり、両方のコマンド)のみが印刷されるようにどのように保証できますか? (上記の例はこれを示しています)

ベストアンサー1

次のようにしてみてください。

join <(command1) <(command2) | cut -d ' ' -f 1,5,4

このjoinコマンドはコマンドではなくファイルを受け入れますが、bashなどのシェルを使用すると、表示された構造を使用してコマンド出力を仮想ファイルに変換できます。

必要にcut応じてそれも使用できます。awk

これを頻繁に実行する場合は、リレーショナルデータベースエンジンの使用を検討してください。

おすすめ記事