合并相邻的文本文件

合并相邻的文本文件

我有.txt来自光谱仪的数据,有 800 行和 5 列。我想将大约 15 个这样的文件合并在一起。所以最终.txt文件应该有 800 行和 75 列。

所有.txt文件如下所示:

Wave   ;Sample   ;Dark     ;Reference;Absorbance
[nm]   ;[counts] ;[counts] ;[counts] ;[A.U]
200.00;   34.647;   -0.317;   79.668; 0.35734
201.00;   29.937;  -21.220;   70.385; 0.25357
202.00;   48.826;   -0.527;   99.657; 0.30721
203.00;   43.201;    4.165;  136.775; 0.53103
...

所需文件:

Wave   ;Sample   ;Dark     ;Reference;Absorbance; Wave   ;Sample   ;Dark     ;Reference;Absorbance
[nm]   ;[counts] ;[counts] ;[counts] ;[A.U];  [nm]   ;[counts] ;[counts] ;[counts] ;[A.U]
200.00;   34.647;   -0.317;   79.668; 0.35734;    200.00;   34.647;   -0.317;   79.668; 0.35734;
201.00;   29.937;  -21.220;   70.385; 0.25357;    201.00;   29.937;  -21.220;   70.385; 0.25357
202.00;   48.826;   -0.527;   99.657; 0.30721;    202.00;   48.826;   -0.527;   99.657; 0.30721
203.00;   43.201;    4.165;  136.775; 0.53103;    203.00;   43.201;    4.165;  136.775; 0.53103

我试过:

cat *.txt > file.txt

但是这会添加.txt文件,就像添加新行一样,而不是像添加新列一样。

答案1

您正在寻找paste实用程序,例如

paste *.txt > file.txt

查看其手册页了解详细信息,最值得注意的是-d指定分隔符的选项。

答案2

简单示例

我将分隔符设置为“空格”,并消除多个空格。

$ cat file-1
ett tu tre
1    2   3
11   22 33
$ cat file-2
fyra fem sex
4     5   6
44   55  66

$ cat file-3
sju atta nio
7      8   9
77    88  99

$ paste file-?
ett tu tre  fyra fem sex    sju atta nio
1    2   3  4     5   6 7      8   9
11   22 33  44   55  66 77    88  99

$ paste -d ' ' file-?
ett tu tre fyra fem sex sju atta nio
1    2   3 4     5   6 7      8   9
11   22 33 44   55  66 77    88  99

$ paste -d ' ' file-? | tr -s ' ' ' '
ett tu tre fyra fem sex sju atta nio
1 2 3 4 5 6 7 8 9
11 22 33 44 55 66 77 88 99

建议的命令行

也许您想消除空格?您想保留分号作为分隔符。尝试使用以下命令行

paste -d ';' input-filespec-with-wildcard | sed 's/ //g' > output-file

input-filespec-with-wildcard可能在哪里*.txt(如果要合并的文件是txt目录中唯一的文件)。

编辑(使用真实数据)

  • 将文件转换为 unix/linux 文本格式,CarriageReturn + LineFeed-->LineFeed使用dos2unix

  • 使用以下命令删除空白行

    for i in *.TXT;do echo sed '/^$/'d "$i" > "${i/.TXT/.txt}";done
    
  • 使用以下命令删除标题行

    for i in *.txt;do grep ';*;' "$i" > "${i/.txt/.txt1}";done
    

    (标题行不包含至少两个分号。)

  • 使用以下命令合并文件

    paste -d ';' *.txt1 | sed 's/ //g' > merged-file.txt
    

我将合并的文件读入 LibreOffice Calc 并使用分号作为分隔符。看起来我认为你想要它。我希望它能按照这些说明为你工作。否则请描述你剩下的问题并告诉我你是否希望我上传“我的” merged-file.txt

LibreOffice Calc

如果您只想执行一次,您可以在 Libre Office Calc 中手动/直观地执行,方法是将文件粘贴到电子表格中。您可以编辑电子表格中的位置并删除造成混乱的线条。

我想说在 LibreOffice Calc 中手动执行此操作相当容易,但如果您需要多次执行此操作或处理大量文件,则最好使用并改进命令行方法。

相关内容