【问题标题】:Using awk variables to remove files使用 awk 变量删除文件
【发布时间】:2012-02-24 18:20:34
【问题描述】:
#!/bin/ksh
grep -v "root" /MCS/usr/dbl/tsk/idle.txt | MESTAID=`awk ' {print $1}'`
grep -e "$MESTAID" MCSTNM.SAV | TTF=`awk ' {print $2}'`

对于这个例子,让我们说$TTF = 123 555 666

上面获取了用户的 3 位唯一 TTF 号码,然后我需要使用以下语法将其删除:rm /path_to_file/TT123.*

但是,当我尝试在脚本中执行此操作时:rm /path_to_file/TT$TTF.*

它尝试发出以下命令:rm /path_to_file/TT123 555 666.*

有没有办法获取$TTF 变量并让它独立运行,即:

rm /path_to_file/TT123.* 
rm /path_to_file/TT555.* 
rm /path_to_file/TT666.*

我希望我的问题很清楚,我肯定不是程序员。只是一个试图编写一个简单的脚本来减少他的日常工作流程的人:) 任何帮助将不胜感激。

【问题讨论】:

  • 我确信我们可以解决这个问题,但我无法遵循您现有的代码。例如,MESTAID 是什么或它是如何关联的尚不清楚。
  • @John:如果我从 for this example ... 开始阅读,我想我明白 user1184129 在问什么......

标签: linux unix ksh aix


【解决方案1】:

我会尝试:

echo -n $TTF | xargs -n 1 -d ' ' -I '{}' rm '/path/to/file/TT{}.*'

echo(1)-n 在末尾禁止换行。

xargs(1)-n 1 将一次执行一个命令,-d ' ' 要求使用空格分隔符,-I '{}' 要求将命令初始参数中的 {} 替换为标准输入元素。

在将其放置到位之前先构建一些小型测试用例可能是明智的;它适用于我的简单测试用例,但你的更复杂:

$ touch TT111 TT222 TT333
$ echo -n $TTF | xargs -n 1 -d ' ' -I '{}' rm '/tmp/TT{}'
$ 

【讨论】:

    【解决方案2】:

    这是 sarnold 答案的简化版本:

    for x in $TTF; do rm /path/to/file/TT$x.*; done
    

    【讨论】:

    • 非常感谢!你们摇滚!
    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 2016-02-29
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-07-21
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多