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

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

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

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. 迭代到第一个文件以创建名称/值数组
  2. 遍历第二个文件并使用数组中的正确值组装每一行

 

问题:是否有为此制作的标准 CLI 工具?

答案1

使用 awk 很容易:

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

答案2

我找不到用于此目的的 CLI 工具,但我可能找到了一种方法来遍历您的文件以检索您想要的输出。首先,我们需要创建用户及其目录的键值对。

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

现在我们已经创建了一个键值对。您可以通过显示字典的内容来验证这一点

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

现在我们将遍历第二个文件,并在打印语句中用目录替换用户。

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

这向我展示了您向我们展示的示例输出。

相关内容