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하고 read다음을 사용하여 첫 번째 답변으로 돌아오는 것에 대한 답변이 하나 더 있습니다.read -ra

read -rp "Enter args: "

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

모든 필드 인쇄

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

관련 정보