Bash 스크립트: 나중에 사용하기 위해 awk 필드 저장

Bash 스크립트: 나중에 사용하기 위해 awk 필드 저장

저는 사용자의 입력을 읽고 이를 사용하여 필드로 나누는 스크립트를 작성하고 있습니다 awk. 스크립트 끝에 있는 필드 중 하나를 사용하고 싶어서 일부 변수에 저장하려고 했지만 소용이 없었습니다.

가능한 해결책 중 하나는 입력을 저장하고 awk마지막 처리에 다시 사용하는 것인데, 일부 변수에서 처리된 정보를 유지하는 방법이 있는지 알고 싶습니다.

예를 들어,

read -p "Enter args: "; echo -n $REPLY | awk '{ \*Do some stuff with fields*\; nth=$3}'

# More script

echo "Your 3rd argument was $nth"

그러나 위의 방법은 작동하지 않습니다. nth끝에는 비어 있습니다(로컬이라는 뜻입니까 awk?).

티아

답변1

왜 awk가 필요한지는 모르겠지만 해당 -a플래그를 추가하여 read배열을 얻을 수 있습니다. 당신이 말하는 필드/열이 공백으로 구분/분리되어 있다고 가정하십시오.

read -rp "Enter args: " -a input

printf 'Your 3rd argument was %s\n' "${input[2]}"
  • Bash 배열은 인덱스 0부터 시작한다는 점을 기억하세요.

입력을 반복할 수 있습니다.

read -rp "Enter args: " -a input

for ((i=0; i<${#input[@]}; i++)); do
  printf 'Your %d argument was %s\n' "$i" "${input[$i]}"
done

아니면 이렇게

read -rp "Enter args: " -a input

for i in "${!input[@]}"; do
  printf 'Your %d argument was %s\n' "$i" "${input[$i]}"
done

하지만 이것이 내가 awk를 사용하는 이유입니다.

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $3}' <<< "$REPLY")

printf 'Your 3rd argument was %s\n' "$nth"

변수 이름에 두 개의 필드(두 번째 필드와 세 번째 필드)를 저장합니다.

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $2, $3}' <<< "$REPLY")

printf 'The argument was %s\n' "$nth"

두 번째와 세 번째 필드를 다른 변수 이름으로 분할하려는 경우.

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $2, $3}' <<< "$REPLY")

printf 'Your 2nd argument was %s\nYour 3rd argument was %s\n' "${nth#* }" "${nth% *}"
  • 별도의 변수에 저장할 수 "${nth#* }"있습니다 ."${nth% *}"

awk모든 필드를 인쇄하는 이에 대한 또 다른 답변은 내 첫 번째 답변으로 돌아갑니다 $0.readread -ra

read -rp "Enter args: "

read -ra fields  < <(awk '{\*Do some stuff with fields*\;print $0}' < <(printf '%s' "$REPLY"))

모든 필드 인쇄

printf '%s\n' "${fields[@]}"
  • 이 질문에 대한 나의 첫 번째 게시물/답변은 bash 배열의 필드를 반복하는 방법과 인덱싱 방법을 보여주었습니다.

관련 정보