linux 批量合并文件_linux批量合并文件夹 - CSDN
  • $cat *.txt > new.txt  More Details:https://www.tecmint.com/13-basic-cat-command-examples-in-linux/
    展开全文
  • 实际情况就是:我有很多个小的excel文件,每个文件只有两行内容,且这些文件的列目录都是一样的,也就是说我需要把这几十行内容整理到一张表上。 方法一:直接复制粘贴 几十个文件

    说到excel大家应该都不陌生,也都对它强大的功能有所耳闻,自己虽然已经用了好多年,但也只能算入门水平,比如今天遇到的一个实际情况就完全不知道怎么处理,上网查阅资料之后才解决,这里记录一下。

    实际情况就是:我有很多个小的excel文件,每个文件只有两行内容,且这些文件的列目录都是一样的,也就是说我需要把这几十行内容整理到一张表上。

    方法一:直接复制粘贴

    几十个文件倒是不算多,但这也不是一个通用的解决方法啊,如果文件再多岂不要累死。

    方法二:用VBA宏解决:

    求助百度之后果然找到了类似问题的解决方法和现成的一段代码:

    首先把所有的子文件全部放在一个文件夹内,然后在同一个文件夹里新建一个空的excel,作为整理信息的总表,打开这个excel之后按alt+f11打开宏函数面板,如图

    然后把下面一段代码拷贝过去:(经测试可直接使用)

    Sub 合并当前目录下所有工作簿的全部工作表()
    Dim MyPath, MyName, AWbName
    Dim Wb As Workbook, WbN As String
    Dim G As Long
    Dim Num As Long
    Dim BOX As String
    Application.ScreenUpdating = False
    MyPath = ActiveWorkbook.Path
    MyName = Dir(MyPath & “\” & “*.xls”)
    AWbName = ActiveWorkbook.Name
    Num = 0
    Do While MyName <> “”
    If MyName <> AWbName Then
    Set Wb = Workbooks.Open(MyPath & “\” & MyName)
    Num = Num + 1
    With Workbooks(1).ActiveSheet
    .Cells(.Range(“A65536″).End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) – 4)
    For G = 1 To Sheets.Count
    Wb.Sheets(G).UsedRange.Copy .Cells(.Range(“A65536″).End(xlUp).Row + 1, 1)
    Next
    WbN = WbN & Chr(13) & Wb.Name
    Wb.Close False
    End With
    End If
    MyName = Dir
    Loop
    Range(“A1″).Select
    Application.ScreenUpdating = True
    MsgBox “共合并了” & Num & “个工作薄下的全部工作表。如下:” & Chr(13) & WbN, vbInformation, “提示”
    End Sub

    具体代码内容我就不详细讲了,还是不难看懂的,拷贝之后点击文档上面的小绿色三角形开始运行,稍等片刻后,返回工作表可以看到资料都被整理进来了。但整理之后还有点小问题要处理,整理进来的文件应该是这样:

    就是每个文件的文件名、标题、内容、以及空行都被整理进来了,而我们最后应该只需要一行的标题及每行的数据就可以了,我们观察其中每一个有内容的行号都是mod4余3的,因此只要我们把这些行筛选出来就行了,那么怎么筛选呢?我们先在最前面新建一列内容,比如为列A,在A1的函数输入框中输入=MOD(ROW(),4)(这里可以根据自己实际情况更改)然后拖动使整列有效,这样第一列就全是0-3的数字,如图:

    最后只需用审阅里面的筛选功能,把不需要的行全选中删除就好了,至此我们就完美解决了批量合并表的问题。

    同步发表于个人博客: xge技术博客

    展开全文
  • linux中一次性统计多个相同文件的方法: cat *.txt &gt; final.txt 上面语句的意义就是将当前目录下面的所有txt文本文件合并到一个名为final.txt的文件

    在linux中一次性统计多个相同文件的方法:
    cat *.txt > final.txt
    上面语句的意义就是将当前目录下面的所有txt文本文件合并到一个名为final.txt的文件。

    展开全文
  • 然后,这个需求就是,把几个比较小的文件批量的复制然后合并到一个文件。实现分分钟去创建一个超大文件的场景。 使用的命令: for i in {1..10}; do cat *.flows >> /Users/fang/Downloads/create/ls/lx3k...

    Linux 命令行 还是可以写代码的, for 循环 可以使用的。

    然后,这个需求就是,把几个比较小的文件,批量的复制然后合并到一个文件。实现分分钟去创建一个超大文件的场景。

    使用的命令:

    for i in {1..10}; do cat *.flows >> /Users/fang/Downloads/create/ls/lx3k.flows; done

    注意,这个for循环中间是2个点,,,,2个点的情况下才会去循环10次。不然也会执行,但是不会报错,就执行一次。

    大师兄

    看我这个截图里面,这个for循环,有2个点的,也有n个点的。只有2个点的情况下,生成的目标文件是将原来的两个文件里面的内容复制了10次,最后写到目标文件去。不然就只是复制了一次。

    可以从文件大小来确认这个情况。原来的2个文件都是366字节,复制一遍,那就是732字节。复制10遍,就是7k了。

    展开全文
  • 也就是说,将这些前缀(或后缀)相同的文件中的内容合并到一个文件中。这些文件的来源可能是前一流程中程序生成的文件,也可能是其他模块生成的文件。 例如,我们要将前缀相同(以“Test_”作为前缀)的Test_1.txt和...

    一、概述
    在实际的软件开发项目中,会出现对多个前缀(或后缀)相同的文件进行合并的需求。也就是说,将这些前缀(或后缀)相同的文件中的内容合并到一个文件中。这些文件的来源可能是前一流程中程序生成的文件,也可能是其他模块生成的文件。
    例如,我们要将前缀相同(以“Test_”作为前缀)的Test_1.txt和Test_2.txt文件中的内容合并到ResultFile.txt文件中,如果Test_1.txt文件中的内容为:

    AAAAA
    
    

    Test_2.txt文件中的内容为:

    BBBBB
    
    

    那么ResultFile.txt文件中的内容就应该为:

    AAAAA
    BBBBB
    
    

    本文详细介绍了相同前缀文件合并的程序流程,并给出了C程序实现。

    二、总体程序流程
    相同前缀文件合并的整体程序流程如图1所示。
    这里写图片描述
    图1 文件合并的总体程序流程

    三、示例程序流程说明
    为了便于说明,我们假定要进行合并的文件前缀为“Test_”,每个文件中的内容以空行结尾,存放在TestFile目录下。结果文件为ResultFile.txt,存放在ResultFile目录下。
    重要程序流程说明如下:
    1.扫描文件
    本示例程序使用scandir函数来扫描TestFile目录下的文件,并将扫描出来的文件存放到一个内存链表中。
    该步骤的流程如图2所示。
    这里写图片描述
    图2 扫描文件程序流程

    2.合并文件
    在实际的软件开发项目中,为了确保最终生成的文件中的内容完全正确,通常的做法是先将每个待合并的文件中的内容写入到一个临时文件中,等合并完成之后,再将临时文件转换为正式文件。本示例程序采用了这种做法,并使用了rename函数来获得最终文件。
    该步骤的流程如图3所示。
    这里写图片描述
    图3 合并文件程序流程

    四、程序编译、运行和测试
    我想这些还是留给读者朋友们来做吧。 :)

    五、程序扩展
    本文只是实现了基本的文件扫描和合并的流程,大家可以从以下方面对本程序进行扩展:
    第一,统计扫描到的文件的个数、从文件中读取到的数据记录的条数和写入到临时文件中的数据记录的条数。
    第二,将处理完成之后的文件删掉,或者是备份到另外的目录中。
    第三,将生成的正式文件上传到FTP服务器上。
    第四,对读取到的每条数据记录进行特殊处理(如添加字段、删除字段、截取字段等)之后,再写入临时文件中。

    附录:完整的程序代码

    /**********************************************************************
    * 版权所有 (C)2015, Zhou Zhaoxiong。
    *
    * 文件名称:FileMerge.c
    * 文件标识:无
    * 内容摘要:演示相同前缀文件内容的合并
    * 其它说明:无
    * 当前版本:V1.0
    * 作    者:Zhou Zhaoxiong
    * 完成日期:20150707
    *
    **********************************************************************/
    #include <stdio.h>
    #include <string.h>
    #include <dirent.h>
    #include <ftw.h>
    
    // 重定义数据类型
    typedef signed   int        INT32;
    typedef unsigned int        UINT32;
    typedef unsigned char       UINT8;
    typedef unsigned short int  UINT16;
    
    // 结构体定义
    // 扫描到的文件名链表
    typedef struct _List
    {
        void         *pData;
        struct _List *pNext;
    }FileNameList_T;
    
    // 函数声明
    INT32 SelectFlies(const struct dirent *pDir);
    FileNameList_T *InsertList(FileNameList_T* pCurNode, void *pData, UINT16 iDataLen);
    void ClearList(FileNameList_T *pFileNameList);
    INT32 ScanFlieAndMerge(UINT8 *pszScanDir);
    INT32 MergeFile(UINT8 *pszMergeFileName, FileNameList_T *ptFileNameList);
    INT32 main(void);
    
    
    /****************************************************************
    * 功能描述: 主函数
    * 输入参数: 无
    * 输出参数: 无
    * 返 回 值: 0-执行成功
               -1-执行失败
    * 其他说明: 无
    * 修改日期       版本号        修改人        修改内容
    * -------------------------------------------------------------
    * 20150707        V1.0     Zhou Zhaoxiong     创建
    ****************************************************************/
    INT32 main(void)
    {
        UINT8   szScanDir[256]  = {0};
        INT32   iRetValue       = 0;
    
        // 获取扫描路径名
        snprintf(szScanDir, sizeof(szScanDir)-1, "%s/zhouzx/test/FileMerge/TestFile", getenv("HOME"));
    
        // 调用函数执行文件的扫描与合并
        iRetValue = ScanFlieAndMerge(szScanDir);
        if (iRetValue == 0)   // 扫描与合并成功
        {
            printf("Exec ScanFlieAndMerge successfully!\n");
            return 0;
        }
        else
        {
            printf("Exec ScanFlieAndMerge failed!\n");
            return -1;
        }
    }
    
    
    /**********************************************************************
    * 功能描述:根据前缀选择文件
    * 输入参数:dir-目录
    * 输出参数:无
    * 返 回 值:0-失败   1-成功
    * 其它说明:无
    * 修改日期         版本号      修改人          修改内容
    * --------------------------------------------------------------------
    * 20150707         V1.0    ZhouZhaoxiong        创建
    ***********************************************************************/
    INT32 SelectFlies(const struct dirent *pDir)
    {
        INT32 iPrefixLen  = 0;
        INT32 iLoopFlag   = 0;
        INT32 iSelectResult = 0;
    
        if (pDir == NULL)
        {
            printf("SelectFlies:input parameter is NULL!\n");
            return 0;
        }
    
        // 匹配文件前缀
        iPrefixLen = strlen("Test_");       // 前缀为"Test_"
        iSelectResult = (0 == strncmp(pDir->d_name, "Test_", iPrefixLen));
        if (iSelectResult == 1)            // 找到了匹配前缀的文件
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    
    /**********************************************************************
    * 功能描述:将数据插入到内存链表中
    * 输入参数:pCurNode-当前节点
                pData-待插入数据
                iDataLen-数据长度
    * 输出参数:无
    * 返 回 值:无
    * 其它说明:无
    * 修改日期         版本号      修改人          修改内容
    * --------------------------------------------------------------------
    * 20150707         V1.0    ZhouZhaoxiong        创建
    ***********************************************************************/
    FileNameList_T *InsertList(FileNameList_T *pCurNode, void *pData, UINT16 iDataLen)
    {
        FileNameList_T *pNewNode = NULL;
    
        if (NULL == pCurNode || NULL == pData)
        {
            printf("InsertList:input parameter(s) is NULL!\n");
            return NULL;
        }
    
        if (NULL != (pNewNode = (FileNameList_T *)malloc(sizeof(*pNewNode) + iDataLen)))
        {
            pNewNode->pData = pNewNode + 1;
            memset(pNewNode->pData, 0x00, iDataLen);
            memcpy(pNewNode->pData, pData, iDataLen);
    
            // 加入到当前节点的后面
            pNewNode->pNext = pCurNode->pNext;
            pCurNode->pNext = pNewNode;
        }
    
        return pNewNode;
    }
    
    /**********************************************************************
    * 功能描述:清空内存链表
    * 输入参数:pFileNameList-链表数据
    * 输出参数:无
    * 返 回 值:无
    * 其它说明:无
    * 修改日期         版本号      修改人          修改内容
    * --------------------------------------------------------------------
    * 20150707         V1.0    ZhouZhaoxiong        创建
    ***********************************************************************/
    void ClearList(FileNameList_T *pFileNameList)
    {
        FileNameList_T *pCur  = NULL;
    
        if (pFileNameList == NULL)
        {
            printf("InsertList:input parameter is NULL!\n");
            return;
        }
    
        for (pCur = pFileNameList->pNext; NULL != pCur; pCur = pFileNameList->pNext)
        {
            pFileNameList->pNext = pCur->pNext;
    
            free(pCur);
            pCur = NULL;
        }
    }
    
    
    /**********************************************************************
    * 功能描述:扫描文件并进行合并
    * 输入参数:pszScanDir-扫描目录
    * 输出参数:无
    * 返 回 值:0-成功   其它-失败
    * 其它说明:无
    * 修改日期         版本号      修改人          修改内容
    * --------------------------------------------------------------------
    * 20150707         V1.0    ZhouZhaoxiong        创建
    ***********************************************************************/
    INT32 ScanFlieAndMerge(UINT8 *pszScanDir)
    {
        INT32  iScanDirRet           = 0;
        UINT32 iIdxNum               = 0;
        INT32  iRetVal               = 0;
        UINT8  szScanFileName[512]   = {0};
        UINT8  szResultFileName[512] = {0};
    
        FileNameList_T  tFileName  = {0};
        FileNameList_T *ptFileName = {0};
    
        struct dirent **ppDirEnt = NULL;
    
        if (pszScanDir == NULL)
        {
            printf("ScanFlieAndMerge:input parameter is NULL!\n");
            return -1;
        }
    
        // 扫描目录, 获取文件
        iScanDirRet = scandir(pszScanDir, &ppDirEnt, SelectFlies, alphasort);
        if (iScanDirRet < 0)
        {
            printf("ScanFlieAndMerge:exec scandir failed, path=%s\n", pszScanDir);
            return -2;
        }
    
        if (iScanDirRet == 0)
        {
            printf("ScanFlieAndMerge: no file in directory %s\n", pszScanDir);
            return -3;
        }
    
        ptFileName = &tFileName;
    
        // 将扫描到的文件插入内存链表中
        for (iIdxNum = 0; iIdxNum < iScanDirRet; iIdxNum ++)
        {
            snprintf(szScanFileName, sizeof(szScanFileName) - 1, "%s/%s", pszScanDir, ppDirEnt[iIdxNum]->d_name);
            if (NULL == (ptFileName = InsertList(ptFileName, szScanFileName, strlen(szScanFileName) + 1)))
            {
                printf("ScanFlieAndMerge: exec InsertList failed, FileName=%s\n", szScanFileName);
                break;
            }
        }
    
        // 释放链表空间
        for (iIdxNum = 0; iIdxNum < iScanDirRet; iIdxNum ++)
        {
            free(ppDirEnt[iIdxNum]);
            ppDirEnt[iIdxNum] = NULL;
        }
    
        free(ppDirEnt);
        ppDirEnt = NULL;
    
        // 获取带路径的结果文件名
        snprintf(szResultFileName, sizeof(szResultFileName) - 1, "%s/zhouzx/test/FileMerge/ResultFile/ResultFile.txt", getenv("HOME"));
    
        iRetVal = MergeFile(szResultFileName, &tFileName);
        if (iRetVal == 0)    // 合并成功
        {
            printf("ScanFlieAndMerge: exec MergeFile successfully, ResultFileName=%s\n", szResultFileName);
    
            // 清空内存链表
            ClearList(&tFileName);
            return 0;
        }
        else
        {
            printf("ScanFlieAndMerge: exec MergeFile failed, ResultFileName=%s\n", szResultFileName);
    
            // 清空内存链表
            ClearList(&tFileName);
            return -4;
        }
    }
    
    
    /**********************************************************************
    * 功能描述: 将多个文件合并为一个
    * 输入参数: pszMergeFileName-合并之后的文件名
                 ptFileNameList-被合并的文件名链表
    * 输出参数: 无
    * 返 回 值: 0-成功   其它-失败
    * 其它说明: 无
    * 修改日期        版本号            修改人         修改内容
    * --------------------------------------------------------------
    * 20150707        V1.0          ZhouZhaoxiong        创建
    ***********************************************************************/
    INT32 MergeFile(UINT8 *pszMergeFileName, FileNameList_T *ptFileNameList)
    {
        FILE   *pFTmp   = NULL;
        FILE   *pFSrc   = NULL;
        INT32   iRetVal = 0;
        UINT8   szContentBuf[256]  = {0};
        UINT8   szTmpFileName[512] = {0};
    
        FileNameList_T *ptScanFileName = NULL;
    
        if (pszMergeFileName == NULL || ptFileNameList == NULL)
        {
            printf("MergeFile:input parameter(s) is NULL!\n");
            return -1;
        }
    
        // 先将内容写入临时文件中,完成之后再写入正式文件中
        // 临时文件名为"正式文件名.tmp"
        snprintf(szTmpFileName, sizeof(szTmpFileName) - 1, "%s%s", pszMergeFileName, ".tmp");
        if (NULL == (pFTmp = fopen(szTmpFileName, "wt")))
        {
            printf("MergeFile:open %s failed!\n", szTmpFileName);
            return -2;
        }
    
        // 将内容写入临时文件中
        for (ptScanFileName = ptFileNameList->pNext; ptScanFileName != NULL; ptScanFileName = ptScanFileName->pNext)
        {
            if (NULL == (pFSrc = fopen(ptScanFileName->pData, "r")))
            {
                printf("MergeFile:open %s failed!\n", ptScanFileName->pData);
                break;
            }
    
            while (NULL != fgets(szContentBuf, sizeof(szContentBuf) - 1, pFSrc))   // 将文件内容取出来
            {
                if (fputs(szContentBuf, pFTmp) <= 0)   // 将文件内容放入临时文件中
                {
                    printf("MergeFile:exec fputs failed, ScanFileName=%s, TmpFileName=%s\n", ptFileNameList->pData, szTmpFileName);
                    break;
                }
            }
    
            if (0 == feof(pFSrc))   // 文件内容未完全从扫描文件中读出, 异常退出
            {
                printf("MergeFile:do not reach the end of file %s\n", ptFileNameList->pData);
                fclose(pFSrc);
                pFSrc = NULL;
                break;
            }
            else
            {
                fclose(pFSrc);
                pFSrc = NULL;
            }
        }
    
        // 使用完文件之后要将其关闭并将文件指针置为空
        fclose(pFTmp);
        pFTmp = NULL;
    
        // 将临时文件更名为正式文件
        iRetVal = rename(szTmpFileName, pszMergeFileName);
        if (iRetVal == 0)
        {
            printf("MergeFile:rename %s to %s successfully!\n", szTmpFileName, pszMergeFileName);
            return 0;
        }
        else
        {
            printf("MergeFile:rename %s to %s failed!\n", szTmpFileName, pszMergeFileName);
            return -3;
        }    
    }
    

    本人微信公众号:zhouzxi,请扫描以下二维码:
    这里写图片描述

    展开全文
  • cat *.txt > ../cat.txt
  • 双击自动合并当前目录各文件夹下ts文件,生成文件名为文件夹名字 每个文件夹下文件如下: 批处理: for /d %%i in (*) do ( ffmpeg -allowed_extensions ALL -i %%i/local.m3u8 -c copy %%i.mp4 ) :end pause ...
  • 熟悉Windows的朋友应该知道,Windows下的视频格式转换软件与合并视频软件不计其数,刚接触Linux的朋友也许会抱怨Linux下没有强大的视频软件,完成视频播放、转化视频格式、合并视频等功能。今天我要给大家推荐一款...
  • 批量合并xls或xlsx

    2019-12-17 16:59:21
    import xlrd import xlwt #打开一个Excel def open_xls(file): fh=xlrd.open_workbook(file) return fh #获取excel中所有的sheet表 def getsheet(fh): return fh.sheets() ...def getnrows(fh,sh...
  • linux下按列合并文件 cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件。 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。paste将按行将...
  • 将要打包的文件列表放入c_list.txt里,如果是数据库的文件,可以用show tables;命令列出表名。 1 2 3 4 5 6 #!/bin/bash #批量打包 foriin`catc_list.txt` do tar-jcvf$i.tar.bz2$i.frm$i.MYD$i.MYI...
  • 假如把tmp文件夹下面的所有后缀为txt的文件移动到,message文件夹中
  • 为什么80%的码农都做不了架构师?>>> ...
  • bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n+=1&goto 3) set file=%n%.txt for /f "skip=1 delims=" %%i in ('type "%fi...
  • 然后下面这条命令是合并当前目录下全部pdf文件 pdfunite *.pdf all.pdf 当然也可以合并部分,或者按顺序合并 pdfunite 1.pdf 2.pdf 3.pdf 4.pdf all-1234.pdf 参考博客: https://blog.csdn.net/a9129...
  • linux合并7z的分卷文件

    2020-01-03 16:38:30
    使用cat命令合并7z的多个分卷文件为7z文件。 比如,分卷文件有:img_celeba.7z.001,img_celeba.7z.002…到img_celeba.7z.014。 切换到分卷文件目录下,然后: cat img_celeba.7z.0** > new.7z 这样就会得到一个名...
  • 选项与参数: -d :后面可以接分隔字符。默认是以 [tab] 来分隔的! - :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。 ...范例一:将 /etc/passwd 与 /etc/shadow 同一行贴在一起 ...
  • 比如说把S3C44B0中文手册的14个文档合并成一个:gs -q -dNOPAUSE -dBATCH-sDEVICE=pdfwrite -sOutputFile=s3c44b0.pdf -f ./S3C44B0X1.pdf./S3C44B0X2.pdf ./S3C44B0X3.pdf ./S3C44B0X4.pdf ./S3C44B0X6.pdf./S3C44...
  • [root@www ~]# paste [-d] file...选项与参数: -d :后面可以接分隔字符。默认是以 [tab] 来分隔的! :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。 范例一:将 /etc/passwd 与 /etc/shadow ...
  • linux 合并 csv

    2019-05-10 10:22:01
    cat *.csv > full.csv
1 2 3 4 5 ... 20
收藏数 13,604
精华内容 5,441
关键字:

linux 批量合并文件