Linuxの最初のファイルの1行が2番目のファイルの複数行にマージされ、非正規化に変わりました。

Linuxの最初のファイルの1行が2番目のファイルの複数行にマージされ、非正規化に変わりました。

ファイル1

Group   Country Lang
IT      USA     ENG

ファイル_2

EMPID   STOREID
1001    1400
1002    1401
1003    1401

私が使うなら

paste -d'\t' File_1 File_2

わかりました。

Group^ICountry^ILang^IEMPID^ISTOREID$
IT^IUSA^IENG^I1001^I1400$
^I1002^I1401$   
^I1003^I1401$

私がこのようなものを手に入れようとしたとき

Group   Country Lang    EMPID   STOREID
IT  USA ENG     1001    1400
IT  USA ENG     1002    1401
IT  USA ENG     1003    1401

提案してください

答え1

$ awk -v OFS='\t' 'NR==FNR{a[FNR==1]=$0; next} {print a[FNR==1], $0}' file1 file2
Group   Country Lang    EMPID   STOREID
IT      USA     ENG     1001    1400
IT      USA     ENG     1002    1401
IT      USA     ENG     1003    1401

上記は「ファイルの最初の行です」()比較結果1または0を使用して配列のインデックスを作成するため、ファイルFNR==11の最初の行はファイル2に関連付けられ、ファイル2の他のすべての行はになります。ファイル1インデックス0の2行目。どのawkでも同じように動作します。

答え2

awkこれに使用できます。

awk '
    FNR == NR {buf[NR] = $0; next} 
    {print (FNR==1 ? buf[1] : buf[2]) "\t" $0}
' file1 file2

最初のファイル()を解析するときにヘッダーと行を保存し、FNR==NR2番目のファイルの各行と一緒に適切なプレフィックスを印刷します。

出力:

Group   Country Lang    EMPID   STOREID
IT      USA     ENG 1001    1400
IT      USA     ENG 1002    1401
IT      USA     ENG 1003    1401

答え3

GNU awkを使って次の行を試してみてください。

$ awk 'FNR==NR {a[NR]=$0;nrow=FNR;next} NR==nrow+1 {print a[1],$0;next} {print a[2],$0}' data1 data2

Group   Country Lang EMPID   STOREID
IT      USA     ENG 1001    1400
IT      USA     ENG 1002    1401
IT      USA     ENG 1003    1401

そして:

$ cat data1
Group   Country Lang
IT      USA     ENG
$ cat data2
EMPID   STOREID
1001    1400
1002    1401
1003    1401

関連情報