【问题标题】:Trying to create a string in awk, complains about division with zero试图在 awk 中创建一个字符串,抱怨除以零
【发布时间】:2013-03-30 20:29:54
【问题描述】:

我正在尝试创建一个脚本来自动创建指向特定文件夹下所有文件夹的符号链接,这应该不难做到,但由于某种原因,我的变量在这个单行脚本中传递得非常奇怪。

#!/bin/bash
# ----------------------------------
# --------- TotalKrill -------------
# ----------------------------------
# Script to create symlinks to my clouded folder in my home directory by listing all  folders/files in the cloudfolder and then creating symlinks in destfolder
# 
myname=`whoami`
searchfolderdir=/home/$myname/
searchfoldername=ownCloud
destfolder=~/
Target=$searchfolderdir$searchfoldername/

ls -1 $searchfolderdir$searchfoldername | awk {'print ln -fs $Target$0 $destfolder/$0'} #|sh 

但我得到一个输出:awk: cmd. line:1: (FILENAME=- FNR=1) fatal: 除零尝试

谁能指点我一个更好的方法或告诉我如何修复这个脚本? “| sh”被注释掉了,所以我可以在运行之前得到正确的行。

在 ubuntu 12.10 x64 机器上试图让它工作。

【问题讨论】:

  • 几个 cmets/问题:1) 您的目录/文件名中是否有空格或其他特殊字符? 2) ls -1 也返回文件你只想创建那些 dirs 吗?

标签: bash unix awk terminal


【解决方案1】:

你需要的是(至少在语法上):

awk -v t="$Target" -v d="$desfolder" '{print "ln -fs",t$0,d"/",$0}' 

注意事项:

  • 如果您不想要除法运算符而是文字字符/,则需要将其括在双引号中。

  • awk 中的字符串需要用双引号括起来,例如字符串 ln -fs

  • 您需要使用-v 选项将shell 变量传递给awk。

  • 你应该总是引用你的变量。

  • 封闭块的花括号需要在单引号内。


添加一些其他修复,例如使用 find 仅返回目录:

#!/bin/bash

myname=$(whoami)
dir="/home/$myname/"
folder="myCloud"
destination="~/"
target="${dir}${folder}"

find "${target}" -maxdepth 1 -type d -print | 
awk -v t="$target" -v d="$destination" '{print "ln -fs",t$0"/",d}' 

【讨论】:

  • ls -1 $searchfolderdir$searchfoldername | awk -v t="$Target" -v d="$searchfolderdir" '{print "ln -fs "t$0,d$0}' |嘘
猜你喜欢
  • 2019-10-17
  • 1970-01-01
  • 2015-12-13
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多