【问题标题】:cut command behaving differently when its output is “ * ”cut 命令在其输出为“ * ”时表现不同
【发布时间】:2016-01-13 12:32:24
【问题描述】:

我正在尝试创建一个 shell 脚本,下面是我尝试从文件中的记录中提取一些值的部分:

tgt_val=cat $file_name | grep "$string_name" | cut -d"|" -f$column_no

当指定的列有一些数字或字符串值时,这很有效,但是当列的值为*时,它会失败,例如:

102|Sam|*|USA

此命令适用于第 1、2 和 4 列

但是,在第 3 列的情况下,它会输出当前目录中的所有文件。

请有人帮忙解决这个问题。

【问题讨论】:

  • cut -d "|" -f1-4 <<< '102|Sam|*|USA' 为我工作。无法重现问题。
  • 在什么操作系统上?适用于 OS X Mavericks
  • 问题是你需要带引号的echo "$tgt_val" 而不是echo $tgt_val。顺便说一句,您的代码没有被正确转录;您需要 tgt_val=$(...) 将输出捕获到变量中(您所拥有的是语法错误,除非 $file_name 的值恰好是有效命令的名称)。
  • 感谢@tripleee 的工作。这是我的 $tgt_val 的问题。当我将值回显为 echo "$tgt_val" 时它起作用了

标签: shell awk grep cut


【解决方案1】:

这是我的 $tgt_val 的问题。当我将值回显为 echo "$tgt_val" 时,它起作用了

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2022-12-12
    • 2019-02-28
    • 2019-05-06
    • 2017-05-18
    • 2016-10-10
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多