如何在awk中用文本对系统("pwd")的输出进行cat?



请原谅我,因为我对shell脚本和awk非常陌生。我一直在尝试创建一个播放列表,在Mplayer中播放我的一些音乐,但它只有在指定每个文件的完整路径时才有效。我一直在尝试设置一个小shell脚本,在每个文件名之前插入$pwd的输出,并将其写入播放列表,如下所示:

ls | awk '{system("pwd") | getline x; grep -v 0; gsub("n",""); print x"/"$1}' > playlist.txt

(grep是为了消除system("pwd")输出的"0"状态)。但是,在x中有一个换行符,所以我得到输出

/home/(directory)
/Song_1.mp3
/home/(directory)
/Song_2.mp3

我想要的是

/home/(directory)/Song_1.mp3
/home/(directory)/Song_2.mp3

正如其他人所回答的那样,还有其他方法可以获得op中请求的完全限定路径。

对于那些将Awk用于其他目的并需要工作目录的人,Awk可以通过ENVIRON数组访问环境变量。您可以通过ENVIRON["PWD"]访问它。

目录是完全限定的,所以请求的/home/(directory)/filename.mp3可能不像预期的那样工作。即使这样,也应该有一个用于OP目的的一行代码:

ls -1 | awk '{ print(ENVIRON["PWD"] "/" $0); }' > playlist.txt

您可以这样使用printf:

printf "%sn" "$PWD"/*

OR else your awk:

printf "%sn" * | awk 'BEGIN{"pwd"|getline d} {print d "/" $0}'

不使用awk或任何东西,但我认为这是你想要的吗?

find -printf ""$PWD/%f"n"

你可能正在尝试这样做吗?

ls -1 ${PWD}/*.mp3

find "${PWD}" -maxdepth 1 -name "*.mp3" -print

for f in ${PWD}/*.mp3
do
  echo "${f}"
done

你也可以做

find $(pwd) -maxdepth 1

最新更新