awk 출력을 변수에 저장하는 데 도움

awk 출력을 변수에 저장하는 데 도움

주어진 텍스트와 키를 사용하여 비지네레 암호를 수행하는 쉘 스크립트를 작성하려고 하는데 변환된 문자의 새 ASCII 번호를 변수에 저장하는 방법을 알 수 없습니다. 코드는 아래와 같이 표시됩니다.

function encode {
  local message=$1
  local key=$2
  local encoded=""
  for ((i=0; i<${#message}; i++)); do
    local m=`echo $message | cut -c $((i+1))`
    local k=`echo $key | cut -c $((i%${#key}+1))`
    local m_ascii=`printf "%d" "'$m"`
    local k_ascii=`printf "%d" "'$k"`
    local e_ascii=$(((m_ascii + k_ascii - 2*97) % 26 + 97))
    local e=echo "&e_ascii" | awk '{ printf("%c",$0); }'
    encoded="$encoded$e"
  done
  echo $encoded
}

해당 디코딩 기능에서도 동일한 문제가 발생했습니다.

답변1

일련의 변수를 사용하여 쉘 명령을 실행하는 방법 awk:

message="foobar"
cmd="echo \047"message"\047 | cut -c 3"
if ( (cmd | getline m) > 0 ) { print m }
else { print "Failed ..." | "cat>&2"; exit 1}
close(cmd)

Ed Morton에게 감사드립니다. 첫 번째 시도는 다음과 같습니다.

message="foobar"
"echo "message" | cut -c 3" | getline m
print m

답변2

다음 echo "&e_ascii"으로 변경한 echo "$e_ascii"다음 코드를 복사/붙여넣기하세요.e=echo ...e=$(echo ...)http://shellcheck.net남은 문제를 해결하는 방법을 알려줄 수 있기를 바랍니다.

그러나 쉘을 사용하여 텍스트를 조작하는 대신 awk와 같은 텍스트 처리 도구를 사용하십시오. GNU awk를 ordchr라이브러리로 사용하여 스크립트를 한 줄씩 구현하려고 하므로 일부가 잘못되었거나 더 나은 방법이 있을 수 있으며 입력 예제를 제공하지 않았기 때문에 테스트되지 않았습니다. /산출:

encode() {
  awk -v message="$1" -v key="$2" '
    @load "ordchr"
    BEGIN {
      msgLgth = length(message)
      keyLgth = length(key)
      for ( i=0; i<msgLgth; i++ ) {
        m = substr(message,i+1,1)
        k = substr(key,(i % keyLgth) + 1,1)
        m_ascii = ord(m)
        k_ascii = ord(k)
        e_ascii = (m_ascii + k_ascii - 2*97) % 26 + 97
        e = chr(e_ascii)
        encoded = encoded e
      }
      print encoded
    }
  '
}

GNU awk가 없으면 다음을 참조하세요.https://www.gnu.org/software/gawk/manual/html_node/Ordinal-Functions.html글쓰기 방식 ord()chr()기능성.

관련 정보