Shell 合并多个文件的列到一个文件中
Shell 合并多个文件的列1 需求描述2 解决方案3 综合示例1 需求描述需要将多个文件按列进行合并,这样就可以很方便用excel打开进行对比。2 解决方案这里所使用的指令主要是paste [-s][-d <间隔字符>]。具体示例如下:合并多个文件的列,其中一个文件包含多列。 paste file1 file23 综合示例(部分)原始文件内容如下:要做的事情就是将文件中所有编号COR
·
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
结果如下:
更多推荐
已为社区贡献5条内容
所有评论(0)