【问题标题】:awk adds carriage return when used in script versus commandlineawk 在脚本与命令行中使用时添加回车
【发布时间】:2016-03-03 08:49:03
【问题描述】:

从命令行:

$cat file.txt

OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED

在 file.txt 上运行 awk:

awk  '{sub(/[  ]+/," ")}1'   file.txt

预期结果:OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED

来自我的脚本: $cat script.sh

active_db_users="OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED"

for i in $active_db_users

do

    acct_status=$(echo $i | awk '{sub(/[  ]+/," ")}1')
    echo $acct_status
done

运行脚本:

./script.sh > output

cat output

OLAPSYS:3FB8EF9DB538647C:LOCKED

OR

EXPIRED

Unexpected Result 有回车。如何修改脚本,结果是一行没有回车:

OLAPSYS:3FB8EF9DB538647C:锁定或过期

【问题讨论】:

  • 您期望循环的多少次迭代?

标签: awk


【解决方案1】:

正确引用你的 shell 变量:

active_db_users="OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED"

for i in "$active_db_users"
do
    acct_status="$(echo "$i" | awk '{sub(/[  ]+/," ")}1')"
    echo "$acct_status"
done

然后再次运行脚本,如果仍有问题,请告诉我们。

如果您不知道为什么应该始终引用变量,请参阅 https://unix.stackexchange.com/a/171347/133219,除非您有特定目的,不加引号并完全理解所有含义。

另请阅读https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice - 无论您尝试执行上述脚本是什么,似乎都是错误的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2014-04-29
    相关资源
    最近更新 更多