![将 awk 的结果保存到变量](https://linux22.com/image/203078/%E5%B0%86%20awk%20%E7%9A%84%E7%BB%93%E6%9E%9C%E4%BF%9D%E5%AD%98%E5%88%B0%E5%8F%98%E9%87%8F.png)
我有一个变量(包含多行文本),我正在使用 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