【问题标题】:merge multiple txt file to csv - add header将多个 txt 文件合并到 csv - 添加标题
【发布时间】:2020-02-19 08:34:36
【问题描述】:

我有多个 txt 文件,每个文件只有一列,我正在尝试将它们全部合并到一个 csv 中。理想情况下,我希望每列都有它们来自的文件的名称,而我被困在最后一部分。

文本文件如下所示(2 个示例,但我有更多示例):

c.Daphnia.txt
geneA
geneB
geneC

c.Drosophila.txt
geneA
geneD
geneE

c.Mouse.txt
geneA
geneV
geneX

期望的输出:

目前我正在这样做: paste -d',' c* > all.csv 输出看起来像这样,它得到了所有的列,但没有标题。

你能帮帮我吗?

谢谢

【问题讨论】:

  • 请提供输入文件中的样本和预期输出
  • @Amaranta_Remedios - 有多少文本文件,这是一次性任务吗??
  • 我得到了 40 个类似的文本文件,每个文件总是只有一列。每个文件的行数不一定每次都相同。实际上变化很大,但只有一列。

标签: shell unix


【解决方案1】:
custom_paste() (
  IFS=$(printf ',') # or IFS=$','
  printf '%s\n' "$*"
  paste -- "$@"
)

custom_paste c* > all.csv

【讨论】:

  • 我确实将自定义命令添加到我的 .bash_profile 中,如下所示:custom_paste() ( IFS=$(printf ',') # or IFS=$',' printf '%s\n' "$*" paste -- "$@" ) 但是,当我运行 custom_paste c* > all.csv 时,输出为空。
  • 我刚刚在我的系统中测试了以下内容。您可以将其放在 .sh 文件中,然后运行脚本 custom_paste() { IFS=$(printf ',') # or IFS=$',' printf '%s\n' "$*" paste -- " $@" } custom_paste D* > all.csv
  • 我做了nano custom_paste.sh #!/bin/bash custom_paste() { IFS=$(printf ',') # or IFS=$',' printf '%s\n' "$*" paste -- "$@" } custom_paste c* > all.csv /.custom_paste.sh 输出还是空的。
  • 您的 custom_paste.sh 文件和所有其他文件在哪里?它应该与 c* 文件存在于同一目录中。如果您这样做,请确保您还将函数命名为其他名称,因为 custom_paste 以 c 开头,而您的文件名也以 c 开头
  • 它在我得到输出的意义上有效,但所有列都只是合并到第一个列中。然后我只得到下一列中的标题
【解决方案2】:

如果它可以帮助我最终使用 python 并这样做的人:

import pandas as pd
df1=pd.read_csv('a.txt',names=['a'])
df2=pd.read_csv('b.txt',names=['b'])
df3=pd.read_csv('c.txt',names=['c'])
df4=pd.read_csv('d.txt',names=['d'])
df5=pd.read_csv('e.txt',names=['e'])

result=pd.concat([df1,df2,df3,df4,df5],axis=1)
result.to_csv('mergedfile.csv',index=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2022-10-19
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多