필드 사이의 공백을 쉼표로 바꾸기 위해 awk를 사용하여 수정하는 변수(여러 줄의 텍스트 포함)가 있고 이를 다른 변수에 저장하려고 합니다. 이것이 내가 지금 하고 있는 일입니다:
VAR2=$(echo "$VAR1" | awk 'END {OFS=","}' 1)
그러나 이렇게 하면 echo "$VAR2"
빈 줄만 인쇄됩니다.
답변1
AWK 스크립트는 아무것도 출력하지 않습니다. 그러나 Bash와 같은 셸을 사용한다고 가정하면 공백을 쉼표로 바꾸는 데 AWK가 필요하지 않습니다.
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