我有两个制表符分隔的文件(fileA.txt 和 fileB.txt),我必须将 fileA.txt 的第一列与 fileB.txt 的第一列进行比较,并且我想打印第二列中存在的值fileB.txt 在输出文件中。下面是我的
fileA.txt
id
chr1_45796849_A_T
chr1_45796854_C_T
chr1_45797174_T_A
chr1_45796852_G_C
chr19_9018540_A_G
chr19_9002576_T_C
chr1_45797487_A_G
chr1_45797153_A_T
chr1_45797750_C_T
Run Code Online (Sandbox Code Playgroud)
FileB.txt
chr_pos freq.var
chr1_45796849_A_T 0.028399811
chr1_45796852_G_C 0.019154034
chr1_45796854_C_T 0.015872901
chr1_45797153_A_T 0.010129176
chr1_45797487_A_G 0.012981216
chr1_45797750_C_T 0.024949931
Run Code Online (Sandbox Code Playgroud)
以下是预期结果
id freq.var
chr1_45796849_A_T 0.028399811
chr1_45796854_C_T 0.015872901
chr1_45797174_T_A
chr1_45796852_G_C 0.019154034
chr19_9018540_A_G
chr19_9002576_T_C
chr1_45797487_A_G 0.012981216
chr1_45797153_A_T 0.010129176
chr1_45797750_C_T 0.024949931
Run Code Online (Sandbox Code Playgroud)
我提到了awk - 比较 2 列的 2 个文件并打印公共行,但它只提供匹配的条目
fileB.txt首先阅读,将第一个字段设为键,将第二个字段设为数组中的值,跳过标题行FNR>1(NR 和 FNR 是什么,“NR==FNR”意味着什么?)。
然后 read fileA.txt,打印第一行的标题,然后打印其第一个字段,后跟数组中的相应元素(如果有)。
awk '
FNR==NR && FNR>1{a[$1]=$2}
NR!=FNR{
if(FNR>1){print $1,a[$1]}
else{print "id", "freq.var"}
}
' OFS="\t" fileB.txt fileA.txt
Run Code Online (Sandbox Code Playgroud)
OFS="\t"将输出字段分隔符设置为制表符。由于您的文件是制表符分隔的,我认为输出文件也应该是制表符分隔的。
您可以通过管道将其导入column -t以进行对齐。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |