我有一个包含文件夹名称/值对的文件:
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
我唯一的想法是:
- 迭代到第一个文件以创建名称/值数组
- 遍历第二个文件并使用数组中的正确值组装每一行
问题:是否有为此制作的标准 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
这向我展示了您向我们展示的示例输出。