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}
, 그렇지 않으면 빈 문자열로 평가됩니다.)x
a[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
이 배열에 정의된 인덱스 집합에 있는지 확인하세요. 이것이 참이므로 print
1이 반환됩니다.
이것은GNU Awk 사용자 가이드 → 8.1.2 배열 요소 참조:
배열의 특정 인덱스에 요소가 존재하는지 확인하려면 다음 식을 사용합니다.
indx in array