将数据从一个文件合并到另一个文件的脚本

我有一个包含文件夹名称/值对的文件:

peter:/home/peter/ max:/home/max-lucas/ judith:/home/judith/documents/ 

我有另一个文件包含文件名称/值对,具有相同的名称:

 max:todo.txt peter:calendar.txt peter:notes.txt peter:dummy.txt 

这是一种数据库
真正的文件不是那么简单。 我必须用sed提取数据,但这不是重点。

我想连接这两个文件:

 /home/peter/calendar.txt /home/peter/notes.txt /home/peter/dummy.txt /home/max-lucas/todo.txt 

我唯一的想法是:

  1. 迭代到第一个文件来创build一个名称/值数组
  2. 遍历第二个文件,并用数组中的正确值组装每一行

问:是否有一个标准的CLI工具呢?

用awk很容易:

 awk -F ":" 'FNR==NR{a[$1]=$2;next} $1 in a { print a[$1]$2}' homedir.txt file.txt 

我找不到这样的cli工具,但我可能会find一种方法来遍历你的文件来检索你想要的输出。 首先,我们需要创build一个关键值对的用户及其目录。

 declare -A users for i in $(cat file1);do users+=( [$(echo $i | awk -F ':' '{print $1}')]=$(echo $i | awk -F ':' '{print $2}')) ; done 

现在我们创build了一个关键值对。 您可以通过显示字典的内容来validation

 for i in "${!users[@]}"; do echo "$i - ${users["$i"]}"; done 

现在我们将遍历第二个文件,在print语句中,我们将用它的目录replace用户。

 for i in $(cat file2);do echo ${users[$(echo $i|awk -F ':' '{print $1}')]}$(echo $i|awk -F ':' '{print $2}') ; done 

这给我看了你给我们的样本输出。