Bash 또는 AWK에는 R 프로그래밍 언어와 같은 IN 연산자가 있습니까?

Bash 또는 AWK에는 R 프로그래밍 언어와 같은 IN 연산자가 있습니까?

R에는 특정 열에 요소가 있는지 확인하는 IN 연산자가 있습니다.

예: 과일 및 시장 데이터 프레임이 있는 경우 각각 과일 이름과 제품을 열 이름으로 사용합니다. 예를 들어, 우리는 시장에 어떤 과일이 있는지 확인해야 합니다.

R에서는,

available_fruit <- fruits$fruit_name %in% market$products

R의 %in%와 유사한 작업을 수행하는 bash 또는 AWK 연산자가 있습니까?

답변1

awk운영자 가 있습니다 in. 배열의 인덱스에 액세스하는 데 사용할 수 있습니다(배열은 연관 배열/해시입니다 awk).

과일 이름이 배열의 키인 경우 market다음을 사용할 수 있습니다.

if (fruit_name in market) { ... }

문자열 in fruit_name이 키 in 인지 확인합니다 market.

예를 들어

BEGIN { FS = "\t" }

NR == FNR { market[$1] = $2; next }

!($1 in market) { printf("No %s in the market\n", $1 ); next }

{ sum += market[$1] }

END { printf("Total sum is %.2f\n", sum ) }

두 개의 파일에서 실행:

$ awk -f script.awk market_prices mylist

품목 목록인 market_prices품목과 가격이 포함된 탭으로 구분된 2열 파일입니다 . mylist스크립트는 첫 번째 파일에서 항목과 해당 가격을 읽고 market해당 항목을 채운 다음 두 번째 파일(시장에 존재하는 경우) 항목의 총 비용을 계산하고 찾을 수 없는 항목을 보고합니다.

in연산자는 배열의 인덱스를 반복하는 데에도 사용할 수 있습니다.

for (i in array) {
    print i, array[i]
}

인덱스의 순서가 정렬되지 않을 수 있습니다.

답변2

Awk와 Bash에는 연관 배열이 있으며 특정 항목이 존재하는지 여부를 찾는 방법을 제공합니다.키/인덱스배열에 있습니다.

전혀:

awk 'BEGIN{ a["foo"]=1; if ("foo" in a) print "yea"; }'

큰 타격을 받은 경우:

bash -c 'declare -A a=([foo]=1); if [[ ${a[foo]+x} = x ]]; then echo "yea"; fi'

(설정된 경우 빈 문자열로 평가되고 ${a[foo]+x}, 그렇지 않으면 빈 문자열로 평가됩니다.)xa[foo]


하지만 특정 값이 존재하는지 쉽게 찾을 수 없습니다.가치배열 요소. 예, a[1]그렇습니다 foo. 하지만 테스트에서는 찾지 못했습니다(인덱스 및 를 찾았 1습니다 2) 3.

awk 'BEGIN{ split("foo bar doo", a); if ("foo" in a) print "foo exists?"; }'

배열을 수동으로 반복해야 합니다.

awk 'BEGIN{ split("foo bar doo", a); for (i in a) if (a[i] == "foo") print "foo exists"; }'

또는 Bash에서:

bash -c 'a=(foo bar doo); for v in "${a[@]}"; do 
         if [[ $v = "foo" ]]; then echo "foo exists"; fi; done;'

답변3

Awk에서는 연산자를 사용하여 인덱스가 배열에 있는지 확인할 수 있습니다 in.

$ awk 'BEGIN {arr["foo"]=1; arr["bar"]=2; print "foo" in arr}'
1

그것이 하는 일은 arr[]두 개의 값을 가진 배열을 정의하는 것입니다: arr[foo]=1; arr[bar]=2.

그런 다음 "foo" in arr해당 인덱스가 foo이 배열에 정의된 인덱스 집합에 있는지 확인하세요. 이것이 참이므로 print1이 반환됩니다.

이것은GNU Awk 사용자 가이드 → 8.1.2 배열 요소 참조:

배열의 특정 인덱스에 요소가 존재하는지 확인하려면 다음 식을 사용합니다.

indx in array

관련 정보