bash - 用于组合 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 脚本的简单解决方案。
解决方案
这应该工作:
#!/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
推荐阅读
- json - Powershell嵌套json到重复csv
- scala - 在 Scala 中用字符串识别对象字段
- java - 如何快速填充所有枚举值的优先级队列?
- c# - 创建和使用 NuGet 包时,无法为 ... 创建清单资源名称
- php - 注意:未定义的偏移量:2 英寸
- spring - 在抽象类的 @Autowired 字段中获取 null
- java - 使用 Paho 连接到 AWS AppSync MQTT 代理
- python - Polly 将 mp3 下载为 int?尝试使用 Lambda 将其提升到 S3
- html - SVG - 如何移动 img 背景但面具保持粘性
- vim - 如何让我的 gvimrc 文件使用我的 vimrc 文件 (VIM)