linux - 如何将多个txt文件加入到基于列?

标签 linux bash join

我有 txt 文件,所有这些文件都在同一个目录中。每个都有 2 列数据。它们看起来像这样:

Label1 DataA1
Label2 DataA2
Label3 DataA3

我想使用 join 来制作一个像这样的大文件。

Label1 DataA1 DataB1 DataC1
Label2 DataA2 DataB2 DataC2
Label3 DataA3 DataB3 DataC3

目前,我有

join fileA fileB | join - fileC

但是,我的文件太多,无法列出所有文件 - 有没有办法为此类命令编写循环?

最佳答案

使用 bash,您可以创建一个脚本,为连接执行递归管道执行:

#!/bin/bash

if [[ $# -ge 2 ]]; then
    function __r {
        if [[ $# -gt 1 ]]; then
            exec join - "$1" | __r "${@:2}"
        else
            exec join - "$1"
        fi
    }

    __r "${@:2}" < "$1"
fi

并将文件作为参数传递给脚本,例如:

bash script.sh file*

或者像这样的排序形式:

find -type f -maxdepth 1 -name 'file*' -print0 | sort -z | xargs -0 bash script.sh

关于linux - 如何将多个txt文件加入到基于列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152187/

相关文章:

c - 如果您 fork() 并且 fork 的(子)进程退出,所有 VM 页面在父进程中是否仍标记为 COW?

linux - "Acknowledge interrupt on exit"VT-x 中的控制导致 CPU 锁定

linux - 如何在期望脚本的时间戳中使用 -gmt 标志

linux - Bash echo 在字符串外带有 $ 字符

linux - bash 可以用来直接与硬件通信吗?

bash - Telnet smtp命令bash 2.05脚本问题

MySQL JOIN 行如果存在则用 NULL 填充

c++ - 接收数据包发送后,等待功能等待

SQL 连接与 SQL 子查询(性能)?

sql - 如何在三个条件下连接两个表?