将 awk 的结果保存到变量

将 awk 的结果保存到变量

我有一个变量(包含多行文本),我正在使用 awk 修改该变量,以用逗号替换字段之间的空格,并且我试图将其保存到另一个变量。这就是我现在正在做的事情:

VAR2=$(echo "$VAR1" | awk 'END {OFS=","}' 1)

然而,当我这样做时echo "$VAR2",它只打印一个空行。

答案1

您的 AWK 脚本不输出任何内容。但你不需要 AWK 用逗号替换空格;假设您使用的是 Bash 等 shell,您可以使用

VAR2="${VAR1// /,}"

或任何外壳,

VAR2=$(printf "%s" "$VAR1" | tr -s '[:blank:]' ,)

前者不会折叠多个空间;如果这很重要,请启用extglob( shopt -s extglob) 并使用

VAR2="${VAR1//+( )/,}"

如果要使用AWK,则需要打印 强制它使用新的输出分隔符更新记录

VAR2=$(printf %s "$VAR1" | awk -v OFS=, '{$1=$1} 1')

答案2

var2=$(awk '{gsub(/[[:space:]]+/,",",$0);print }' filename)

输出

echo $var2
praveen,ajay,san

相关内容