【问题标题】:how to extract a part of file name in unix scripting and check if it exists [duplicate]如何在unix脚本中提取文件名的一部分并检查它是否存在[重复]
【发布时间】:2021-10-17 17:34:27
【问题描述】:

我需要编写一个脚本,我必须从文件abc_def_xxx_yyy_20210515.txt 中提取部分名称并检查abc_def_xxx_yyy.txt 是否存在。如果没有,则创建文件。

FILE="abc_def_xxx_yyy_20210515.txt"
DLS=echo $FILE | awk -F_ '{print $1,$2,$3,$4".txt"}'
DLL=\home\xxx\$DLS
if [-f "$DLL"]; then
echo "$DLL exists"
else 
touch "$DLL"
fi

我收到错误消息"abc_def_xxx_yyy_20210515.txt" not found

但如果我只是运行

FILE="abc_def_xxx_yyy_20210515.txt"
echo $FILE | awk -F_ '{print $1,$2,$3,$4".txt"}' 

我收到abc_def_xxx_yyy.txt

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你使用bash还是ksh
  • 这里有一堆语法错误;通过shellcheck.net 运行它并修复它指出的内容。此外,看起来您使用的是 DOS/Windows 路径(使用 / 而不是 ``)——这是在 Windows 还是 Unix/Linux 上?
  • 在 UNIX 路径上
  • 我正在使用 ksh
  • 您忘记了命令替换周围的$(...)。您将字符串echo 分配给变量DLS,然后尝试将$FILE 作为命令执行。

标签: bash shell unix scripting ksh


【解决方案1】:

试试:

FILE="abc_def_xxx_yyy_20210515.txt"
DLS="${FILE%_*}.txt"
DLL="$HOME/$DLS"
if [ -f "$DLL"]; then
  echo "$DLL exists"
else 
  touch "$DLL"
fi

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 2013-01-19
    • 2019-09-15
    • 2013-12-07
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2019-12-26
    相关资源
    最近更新 更多