【问题标题】:AWK working with variables, not filesAWK 使用变量,而不是文件
【发布时间】:2011-08-24 09:47:03
【问题描述】:

我读过这个post,但我不知道如何制作我需要的东西。 我有一个变量,它是一个路径,所以我想知道文件的名称(如果我用/ 分隔,则为最后一列)。

于是我尝试了几种组合,比如:

#!/bin/sh

source=$1
target=$2


for i in "$source"/*
do
    $name = awk -F/ -v '{ print $NF }' $i
    echo $name
done

但是没有成功,有人可以帮助我吗?提前致谢

【问题讨论】:

    标签: awk


    【解决方案1】:

    有点不清楚...您想从路径中提取文件名吗?

    获取没有文件名的路径使用dirname:

    $ dirname /usr/bin/foo.bar
    /usr/bin
    

    获取没有路径的文件名使用basename

    $ basename /usr/bin/foo.bar
    foo.bar
    

    使用 awk:

    $ echo $a 
    /usr/bin/foo.bar  
    
    $ echo $a | awk -F/ '{print $NF}' 
    foo.bar
    

    【讨论】:

      【解决方案2】:

      您可以只使用 shell 提取文件名而无需外部工具

      for file in $source/*
      do
        echo ${file##*/}
      done
      

      【讨论】:

        【解决方案3】:

        如果您想提取文件名,请按照 Fredrik 的建议使用 basename。这是一个解决方案:

        #!/bin/sh
        
        source=$1
        target=$2
        
        for i in "$source"/*
        do
            name=$(basename $i)
            echo $name
        done
        

        此解决方案有效,但有一个错误:如果目录或文件的名称中包含空格,则它无法正常工作。这是我修改后的解决方案:

        #!/bin/sh
        
        source=$1
        target=$2
        
        pushd "$source" >/dev/null 2>&1
        for name in *
        do
            echo $name
        done
        popd >/dev/null 2>&1
        

        请注意,我使用 pushd/popd 进出源目录。由于我已经在源目录中,所以我不需要调用 basename。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-30
          • 2012-02-24
          • 1970-01-01
          • 2021-07-10
          • 1970-01-01
          • 1970-01-01
          • 2020-03-15
          • 2018-05-12
          相关资源
          最近更新 更多