awk在脚本与命令行

时间:2016-03-03 08:49:04

标签: awk

从命令行:

$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

意外结果有回车符。如何修改脚本,使结果为一行,没有回车符:

OLAPSYS:3FB8EF9DB538647C:已锁定或已过期

1 个答案:

答案 0 :(得分:0)

正确引用你的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 - 无论你想要做什么,上述脚本似乎都是错误的方法。