Text 将txt文件合并到单个文件中,然后再次将其拆分

Text 将txt文件合并到单个文件中,然后再次将其拆分,text,awk,terminal,Text,Awk,Terminal,我有数百个txt文件,它们都在一个目录中。我希望能够做到以下几点: 将所有文件合并到一个txt文件中。此命令将在与文件名合并时插入一个符号(如§) [然后我对组合文件做了一些工作,包括进行更改。其中一些更改涉及使用优先级软件,该软件处理一个大文件比处理许多小文件效果更好] 使用第二个命令遍历合并的文件并将其拆分回单独的文件,使用符号旁边的文件名命名每个拆分文件 例子: 加入前: 文件1:“Towns.txt” 文件2:“水果和坚果.txt” 加入后,但在我做出改变之前 (单个文件) 加入后,我会

我有数百个txt文件,它们都在一个目录中。我希望能够做到以下几点:

  • 将所有文件合并到一个txt文件中。此命令将在与文件名合并时插入一个符号(如
    §
  • [然后我对组合文件做了一些工作,包括进行更改。其中一些更改涉及使用优先级软件,该软件处理一个大文件比处理许多小文件效果更好]
  • 使用第二个命令遍历合并的文件并将其拆分回单独的文件,使用符号旁边的文件名命名每个拆分文件 例子: 加入前: 文件1:“Towns.txt”

    文件2:“水果和坚果.txt”

    加入后,但在我做出改变之前 (单个文件)

    加入后,我会做出改变 (这些更改在单个文件中手动进行)

    拆分后: 文件1:“Towns.txt”

    文件2:“水果和坚果.txt”


    我尝试过的步骤 合并文件 我在中修改了答案,生成了一个
    awk
    命令,可以将文件与前缀为§符号的文件名连接在一起

    awk '(FNR==1){print "§" FILENAME }1' * > ^0join.txt;
    
    这似乎很有效

    分割文件 这为分割文件提供了一个解决方案。我已根据自己的需要重新制作:

    awk -v RS='§' '{ outfile = "output_file_" NR; print > outfile}' ^0join.txt   
    
    唯一的问题是输出文件的名称为“outfile1”、“outfile2”等。 它们还将文件名保留在每个文件的顶部,这是我不想要的。 而且,有时当我使用这个命令时,它只会将所有内容放在一个名为“outfile”的文件中,而不会将它们拆分

    我还发现了另一个解决方案,我重新设计了:

    awk '{print $0 "file" NR}' RS='§'  ^0join.txt
    
    然而,这似乎没有任何作用

    笔记
    §
    可以是任何其他符号。
    我使用的是Mac OS 10.14.6,所以我想要一些能够在Mac OS终端上工作的东西

    你能试试下面的吗

    加入命令:

    awk 'FNR==1{print "§" FILENAME}; 1' Towns.txt  "Fruits and Nuts.txt" > Output_file
    
    对于拆分文件:

    awk '/^§/{close(file);sub(/^§/,"");file=$0;next} {print > (file)}' Output_file
    

    注意:根据OP的评论,如果需要将
    .txt
    文件传递给命令,那么我们可以将
    /complete/path/to/txt\u files/*.txt/
    放在
    awk
    第一个文件之后,并且可以从中删除单个文件名(未测试,但应该可以工作)

    它说“awk:无法打开文件水果输入记录编号25,文件水果源代码行编号1”输出文件仅包含城镇。@big_微笑,因为您的文件中有空间,所以我将它们包装在
    中尝试我编辑的代码。我检查了它们,它们都工作正常,请告诉我?join命令工作正常。但是,我有100个文件,所以如果它可以在目录上运行,而不需要指定文件名,那就更好了。Split命令可以工作,但它会将文件名保留在每个文档的顶部。(例如,新拆分的towns.txt文档以towns.txt开头)。@big_smile,检查我编辑的加入代码,它现在不应该写文件名,让我知道。@big_smile,要在目录上运行它,请尝试我的代码,最后不管文件名如何传递,比如
    awk'../path/to/files/*.txt
    这将对所有文本文件等运行,同样,您也可以根据需要编辑此命令。
    Apples
    Pomegranates
    Sycamore
    
    awk '(FNR==1){print "§" FILENAME }1' * > ^0join.txt;
    
    awk -v RS='§' '{ outfile = "output_file_" NR; print > outfile}' ^0join.txt   
    
    awk '{print $0 "file" NR}' RS='§'  ^0join.txt
    
    awk 'FNR==1{print "§" FILENAME}; 1' Towns.txt  "Fruits and Nuts.txt" > Output_file
    
    awk '/^§/{close(file);sub(/^§/,"");file=$0;next} {print > (file)}' Output_file