首页 > 解决方案 > 用于组合 3 个文件的 Shell 脚本

问题描述

我有 3 个包含以下数据的文件

$cat File1.txt
Apple,May
Orange,June
Mango,July

$cat File2.txt
Apple,Jan
Grapes,June

$cat File3.txt
Apple,March
Mango,Feb
Banana,Dec

我需要以下输出文件。

$Output_file.txt
Apple,May|Jan|March
Orange,June
Mango,July|Feb
Grapes,June
Banana,Dec

这里的要求是取出第一列,然后每个文件的第一列的公共数据需要被搜索,第二列需要是“|” 分开。如果没有公共列,则需要在输出文件中打印相同的列。

我试过把它放在一个while循环中,但随着文件大小的增加,它需要时间。想要一个使用 shell 脚本的简单解决方案。

标签: bashshellawk

解决方案


这应该工作:

#!/bin/bash
for FRUIT in $( cat "$@" | cut -d "," -f 1 | sort | uniq )
do
    echo -ne "${FRUIT},"
    awk -F "," "\$1 == \"$FRUIT\" {printf(\"%s|\",\$2)}" "$@" | sed 's/.$/\'$'\n/'
done

运行它:

$ ./script.sh File1.txt File2.txt File3.txt

推荐阅读