2017-02-06 32 views
0

awkを使用して2つの異なるファイルから2つの列を結合したいと考えています。awkで異なるファイルの2つの列を結合する

A B C D E F 

FIL2:これらのファイルは、(A、B、C、0、1、2、などが列です)

file1のように見える

0 1 2 3 4 5 

そして、私のことができるようにしたいです私のouputを上の任意の列を選択し、フォームの何か:

すなわち、私は出力になりたい:

A C E 4 5 

私は次のawkコード(と非常に似たもの)で百万の答えを見てきました。しかし、それらのどれも私が解決したい正確な問題に対処していない:

awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1 

awk ' 
    NR==FNR {A[$1,$3,$6] = $0; next} 
    ($1 SUBSEP $2 SUBSEP $3) in A {print A[$1,$2,$3], $4} 
' A.txt B.txt 

をしかし、それらのどれも私がやりたいように見えるんし、私は彼らを理解することはできませんよ。

したがって、awkを使用して希望の出力を得るにはどうすればよいですか? (と、私は実際に学びたいの説明を、提供してください)

注: 私はAWKを学び、理解しようとしている、言ったように私は

paste <(awk '{print $1}' file1) <(awk '{print $2}' file2) 

のようなものを使用してこれを行うことができます知っています。真の多次元配列とARGINDのためのGNUのawkで

+1

2つのファイルから何を取得したいのですか....希望する出力plsを追加できますか? – Kent

+0

ありがとうございます。申し訳ありませんが非常に明確でない場合。私は質問を編集しました(ACE 4 5のA、B、C ... 0、1、2 ...の列が表示されます) – Scarlehoff

+1

ジョインでは、列を横に並べて貼り付けることを意味しますindex?参加するには、一致するキー値が必要です。これはサンプル入力ファイルにはありません。 – karakfa

答えて

1

:あなたが好きな順序で各ファイルからフィールドを印刷することができるように

$ awk -v flds='1 1 1 3 1 5 2 5 2 6' ' 
    BEGIN{ nf = split(flds,o) } 
    { f[ARGIND][1]; split($0,f[ARGIND]) } 
    NR!=FNR { for (i=2; i<=nf; i+=2) printf "%s%s", f[o[i-1]][o[i]], (i<nf?OFS:ORS) } 
' file1 file2 
A C E 4 5 

「FLDS」の文字列は、<file number> <field number in that file>ペアのちょうどシリーズです、例:

$ awk -v flds='1 1 2 2 1 3 2 4 1 5 2 6' 'BEGIN{nf=split(flds,o)} {f[ARGIND][1]; split($0,f[ARGIND])} NR!=FNR{for (i=2; i<=nf; i+=2) printf "%s%s",f[o[i-1]][o[i]], (i<nf?OFS:ORS)}' file1 file2 
A 1 C 3 E 5 
$ awk -v flds='2 1 1 2 2 3 1 4 2 5' 'BEGIN{nf=split(flds,o)} {f[ARGIND][1]; split($0,f[ARGIND])} NR!=FNR{for (i=2; i<=nf; i+=2) printf "%s%s",f[o[i-1]][o[i]], (i<nf?OFS:ORS)}' file1 file2 
0 B 2 D 4 
関連する問題