我有一个包含目录列表的文件:
$ cat dirs.txt
/some/path
/other/path
/some/another/one
当前目录是/home/loom
$ echo $PWD
/home/loom
我想添加$PWD
到每一行,dirs.txt
如下所示:
/home/loom/some/path
/home/loom/other/path
/home/loom/some/another/one
我尝试命令失败:
$ cat dirs.txt | awk '{print $PWD$1}'
/some/path/some/path
/other/path/other/path
/some/another/one/some/another/one
它只是每行翻倍。什么命令可以解决我的问题?
我的意思是参数答案,而不是cat dirs.txt | awk '{print "/home/loom" $1}'
答案1
PWD
是一个 shell 变量,因此不会在 awk 使用的单引号内展开。
awk -v pwd="$PWD" '{print pwd$1}' dirs.txt
这会将pwd
awk
变量设置为 shell 变量的值PWD
,然后打印每行的第 1 列,dirs.txt
并将该值添加到开头。
使用 GNU awk,您可以使用该-i inplace
选项用输出覆盖您的文件,否则您必须将其重定向到新文件,并在需要时用该文件覆盖旧文件。
答案2
当然还有更多方法可以做到这一点,所以既然您要求任何命令来解决您的问题,另一种方法可能是这样的:
while read -r line; do echo "${PWD}${line}"; done < "dirs"