File3の指示に従って、単純なbashスクリプト(sed?awk?)を使用してFile1とFile2の行を新しいFile4にコピーできますか?
File1: /*two or more columns, tab delimited*/
AC 456324
DC 689712
GH 123677
KL 236587
File2: /*two or more columns, tab delimited*/
DC AABBC TTYJU
AC DDDEE YYUKI
KL GGHHG QQSSD
File3: /*one column*/
AC
DC
File4 /*tab delimited*/
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
私は実際にPython辞書を使ってこれをやっていますが、簡単な解決策を知っていますか?
注:この質問にはすでに最も単純な形式の答えがあります。ファイルを1行ずつマージ
答え1
これは、配列を使用して接続したより簡単なケースの拡張です。awk
$ awk 'BEGIN{OFS="\t"} NR==FNR {a[$1]=$1;next;} \
$1 in a {k=$1;$1="";a[k]=a[k]$0} END{for (i in a) print a[i]}' File3 File1 File2
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
とは異なり、join
キーフィールドのファイルを事前にソートする必要はありません。
答え2
コマンドを使用して公正に実行できますjoin
。
$ join -j 1 <(sort file3) <(sort file1) > tmp ; \
join -j 1 <(sort tmp) <(sort file2) | sed 's/ /\t/g' > file4
- 初めて
join
使うファイル3そしてファイル1~からファイル3鍵があります。 - 次に、上記のコマンドの出力を次のように作成します。tmp今すぐサインアップtmpそして ファイル2。
- 上記のコマンドに従って、出力はスペースで区切られた形式で表示されます。
sed
あなたの要件はタブで区切られた形式なので、すべてのスペースをタブに置き換えるコマンドに提供しました。- ついに私は手紙を書いた。ファイル4あなたの要求に従って。