shell 合并文件
时间: 2023-08-22 17:14:10 浏览: 450
要合并文件,你可以使用以下的shell脚本代码:
```bash
#!/bin/bash
# 获取要处理的文件名
file=${1}
# 获取要合并的core编号和行号
core_list=${2//./ }
row_list=${3//./ }
# 创建一个空文件tmp.txt
echo > tmp.txt
# 定义一个函数agg_res用于合并文件
agg_res(){
for row in ${row_list[@]}
do
for cpu in ${core_list[@]}
do
# 使用grep和awk命令提取指定core和行号的列,并将结果输出到tmp1.txt
shell_str="cat \${file} |grep \" \${cpu} \"|awk '{print \$${row}}'|awk -F'k' '{print \$1}' > tmp1.txt"
echo "shell str: ${shell_str}"
eval ${shell_str}
# 使用paste命令将tmp.txt和tmp1.txt的列合并,并将结果输出到tmp2.txt
paste tmp.txt tmp1.txt > tmp2.txt
# 将tmp2.txt重命名为tmp.txt,以便下一次循环使用
mv tmp2.txt tmp.txt
done
done
}
# 调用agg_res函数进行文件合并
agg_res
# 输出合并后的文件的前10行
head -n 10 tmp.txt
```
这段代码会将文件中指定core编号和行号的列合并到一个文件中,并将结果输出到tmp.txt文件中。你可以将上述代码保存为一个shell脚本文件,比如merge_files.sh,然后在命令行中执行该脚本,传入要处理的文件名、core编号列表和行号列表作为参数,如下所示:
```bash
bash merge_files.sh [file_name] [core_list] [row_list]
```
请将[file_name]替换为你要处理的文件名,[core_list]替换为要合并的core编号列表,[row_list]替换为要合并的行号列表。执行脚本后,它会将合并后的文件的前10行输出到屏幕上。
阅读全文