我有三个.txt文件(制表符分隔(
FileA.txt
Data_ID sample_ID
2253791 20481
2253793 20483
2253798 20488
FileB.txt
Subject_ID age sex smok
1869793 11 2 1
1869585 7 1 3
1870238 9 2 1
FileC.txt
Subject_ID Data_ID
1869793 2253798
1869585 2253793
1870238 2253791
我想合并这三个文件,使我的output.txt
包含三个文件的所有唯一列,如以下
Subject_ID Data_ID sample_ID age sex smok
1869793 2253798 20481 11 2 1
1869585 2253793 20483 7 1 3
1870238 2253791 20488 9 2 1
我试过类似paste
的以下内容,但不起作用。我哪里做错了?是否也有其他含有糊状物或awk
的解决方案?
paste <(awk '{print $1"t"$2}' FileA.txt)
<(awk '{print $1}' FileC.txt)
<(awk '{print $2"t"$3"t"$4"}' FileC.txt)
> output.txt
无订单或任何关系的输出:
1,$4"}'
有一个额外的"
,应该在您的命令中删除它。
2,最后一个FileC.txt应该更改FileB.txt
3,粘贴following but its not working
的代码可能有一些错误格式?你能上传一张截图吗?
4、只合并列,没有什么关系判断?
如果是,试试这个(只有一些格式被你的代码固定为一行(:
paste <(awk '{print $1"t"$2}' FileC.txt) <(awk '{print $2}' FileA.txt) <(awk '{print $2"t"$3"t"$4}' FileB.txt) > output.txt
在我编辑你的问题之前得到你想要的:
$ cat output.txt
Subject_ID Data_ID sample_ID age sex smok
1869793 2253798 20481 11 2 1
1869585 2253793 20483 7 1 3
1870238 2253791 20488 9 2 1
带顺序和关系的输出:
join -1 2 -2 1 <(join -1 2 -2 1 <(sort -k2 FileC.txt) <(sort -k1 FileA.txt) | sort -k2) <(sort -k1 FileB.txt) | tac | awk 'NR==1 {line=$0; next} 1; END{print line}' | tac
获取输出:
Subject_ID Data_ID sample_ID age sex smok
1869585 2253793 20483 7 1 3
1869793 2253798 20488 11 2 1
1870238 2253791 20481 9 2 1
1、使用join
将两个文件的行合并到原来为sort
的同一列。
2,使用tac file | awk 'NR==1 {line=$0; next} 1; END{print line}' | tac
将收割台移动到顶部。