【问题标题】:using awk inside of .sh bash script file在 .sh bash 脚本文件中使用 awk
【发布时间】:2017-01-03 08:09:55
【问题描述】:

试图在 linux bash 中实现某些目标,但失败了 :(

我有这个 ls 命令,用于在目录中获得 cvs 文件的良好输出。我还使用 awk 命令来删除我不需要的权限信息

ls -lrth *.csv | awk '{print $5, $6, $7, $8, $9}'

但现在我希望在 .sh 脚本文件中运行它。 如果我在脚本中写这样的东西,它就可以工作

LIST=$(ls -lrth *.csv)
echo $LIST

但如果我将 awk 添加到它,它不会,因为这些参数,我很生气。

LIST=$(ls -lrth *.csv | awk '{print $5, $6, $7, $8, $9}')
echo $LIST

如何在可执行的 sh 文件中正确写入?

【问题讨论】:

  • @usr - 失败是指没有错误消息,但也没有输出,没有列出任何内容。
  • @anubhava - 上面说,我正在尝试从 ls 命令生成的文件权限信息中删除
  • a) 不要解析 ls 的输出,b) 总是引用你的 shell 变量,c) 不要给非导出变量全大写的名字。 d) 到目前为止,您向我们展示的内容没有理由在使用/不使用 awk 的情况下表现不同,因此问题在于您迄今为止尚未向我们展示的一些代码。
  • 解决了,我只是运行 ls 命令而不将其分配给变量,它工作了
  • 我怀疑你的问题是当你回应它时你没有引用$LIST(即你应该使用echo "$LIST",而不是echo $LIST)而且你只是给我们一个红色当你说LIST=$(ls -lrth *.csv); echo $LIST 做了你想做的事情时,鲱鱼。

标签: linux bash shell awk ls


【解决方案1】:

如果您想从 bash 脚本中运行,您可以删除 echo:

#! /bin/bash
# list_csv.sh
ls -lrth *.csv | awk '{print $5, $6, $7, $8, $9}'

不过,我建议您改用别名,因为您只是想用一个命令替换两个命令。您可以将它放在 .bash_aliases 文件中以在会话之间持续存在,或者从控制台运行它以将其用于一个会话:

 alias lscsv="ls -lrth *.csv | awk '{print \$5, \$6, \$7, \$8, \$9}'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2023-03-30
    • 2018-09-04
    • 2016-07-23
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多