我有 6 个多个文件,每个文件只有 1 列包含名称。我想读取所有这些文件并将它们合并到 1 个文件中,如下所示:
file1 file2 file3 file4 file5 file6 Count
adam adam adam adam adam adam 1
Roy NA Roy Roy NA NA 0.5
NA Sam Sam NA NA NA 0.33
这表明名称adam
存在于每个文件中,同时Roy
存在于 3 个文件 (file1,3,4) 和Sam
2 个文件 (file2,3) 中。最后一列是附加的,是在合并所有文件后计算的。它给出了所有文件中出现的名称的比例。例如,对于 Roy,在 6 个文件中的 3 个中观察到它,因此Count
是3/6 = 0.5
生成的数据帧colnames
应该代表实际的文件名。假设我读取的文件名为file1.txt
,file2.txt
等等......
任何帮助都感激不尽。谢谢。
答案1
您可以编写Python脚本来读取每个文件并创建包含名称作为键和计数名称数量作为值的字典。最后,您可以将每个值除以文件数。
像这样的事情:
#!/usr/bin/env python
filelist= ['file1.txt', 'file2.txt', 'file3.txt', 'file4.txt']
dictionary= dict()
for file in filelist:
fd= open(file, "r")
for name in fd.readlines():
name= name.strip()
if name in dictionary.keys():
dictionary[name]+= 1
else:
dictionary[name]= 1
fd.close()
for x in dictionary.keys():
print("{0} : {1}".format(x, float(dictionary[x])/len(filelist)))
编辑:
Linux 中默认使用 Python。您可以复制它,粘贴到文件并执行。它正在工作
答案2
对于给定的输入,似乎每个文件都有相同的行数和扩展名,您只需通过管道传输到列即可。
$ paste *.txt | column -t
编辑:
如果 NA 是“空单元格”,请使用以下命令:
$ paste *.txt | column -s $'\t' -tn
如果文件具有不同的行号,这也适用。