Shell 合并多个文件的列

1 需求描述

需要将多个文件按列进行合并,这样就可以很方便用excel打开进行对比。

2 解决方案

这里所使用的指令主要是paste [-s][-d <间隔字符>]。具体示例如下:

  • 合并多个文件的列,其中一个文件包含多列paste file1 file2在这里插入图片描述

3 综合示例

(部分)原始文件内容如下:
在这里插入图片描述
要做的事情就是将文件中所有CORE编号为1,2,3,4的第3,4,5,6列合并到一个文件中。

#!/bin/bash

if [[ $# -lt 3 ]]
then
    echo "Right shell : $0 [file_name] [core list] [row list]"
fi

file=${1} #要处理的文件
core_list=${2//./ } # core list,注意这里需要传入一个数组,字符串也可以。${str//,// }的目的是将字符串str按照空格进行切分,其实就是将一个以空格为分隔符的字符串变成字符串数组
row_list=${3//./ } # row list,注意这里需要传入一个数组,字符串也可以

echo > tmp.txt

agg_res(){
    for row in ${row_list[@]}
    do 
        for cpu in ${core_list[@]}
        do
            shell_str="cat \${file} |grep \" \${cpu} \"|awk '{print \$${row}}'|awk -F'k' '{print \$1}' > tmp1.txt"
            echo "shell str: ${shell_str}"
            eval ${shell_str} # 这里将${shell_str}当作shell并进行执行
            paste tmp.txt tmp1.txt  > tmp2.txt # 将tmp.txt与tmp1.txt列合并输出到tmp2.txt,注意这里不能合并输出到tmp.txt或者tmp1.txt,否则会产生循环
            mv tmp2.txt tmp.txt
        done
    done
}
agg_res 
head -n 10 tmp.txt

结果如下:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐