如何在awk中使用文本输出系统(" pwd")?

时间:2014-03-21 18:20:39

标签: linux shell awk

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

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

(grep是摆脱系统的" 0"状态输出(" pwd"))。但是,x中有换行符,所以我得到了输出

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

我想要的是

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

5 个答案:

答案 0 :(得分:1)

您可以像这样使用printf

printf "%s\n" "$PWD"/*

或者你的awk:

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

答案 1 :(得分:0)

你是想尝试这样做吗?

ls -1 ${PWD}/*.mp3

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

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

答案 2 :(得分:0)

您也可以

find $(pwd) -maxdepth 1

答案 3 :(得分:0)

不使用awk或其他任何东西,但我认为这可以做你想要的吗?

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

答案 4 :(得分:0)

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

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

该目录是完全限定的,因此请求的 /home/(directory)/filename.mp3 可能无法按预期工作。即便如此,一个应该为 OP 目的工作的单行:

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