이것은 다음을 기반으로 한 새로운 질문입니다. Output the result of each loop in different columns.리눅스에서 루프의 문자열에서 특정 문자 추출
하지만 새로운 질문이기 때문에 링크에서 질문을 볼 필요는 없으며 아래의 새로운 질문을 명확하게 설명 할 것입니다.
money.txt
파일은 두 개의 열이 있습니다 (이름과 돈을)
Mary 13
Lucy 8
Jack 20
range.txt
파일 세 개의 열이 있습니다 (과일, MIN_VALUE 및 MAX_VALUE)
apple 10 15
banana 7 12
orange 17 22
blueberry 14 22
내 목표는 돈이 있는지 여부를 테스트하기를 money.txt
의 파일은 range.txt
에서 min_value와 max_value 사이에 있습니다. 그렇다면 fruit
의 (max_value
- money
) 번째 문자를 range.txt
에 인쇄하고, 그렇지 않으면 "x"
을 출력하십시오. 예를 들어
, Mary
가 13
가 apple
의 MIN_VALUE 및 MAX_VALUE 내에 상기 money.txt
에 13
이고 max_value
-money
값은 15
이고 - = 2
13
, 그래서 apple
의 두번째 문자를 출력한다, 즉 p
.
예상 된 결과는 다음과 같습니다 (제 4 열은 메리입니다, 5 열은 루시를 위해, 그리고 6 번째 열은 잭입니다) @ocurran의 도움으로
apple 10 15 p x x
banana 7 12 x a x
orange 17 22 x x r
blueberry 14 22 x x l
, 나는 시도 :
awk: line 14: syntax error at or near {
awk: line 16: syntax error at or near else
awk: line 19: syntax error at or near }
fruitcharacter=${fruit:($3-money[i]-1):1}
가 작동하지 않을 수있는 것 같다
# load prices by index to maintain read order
awk 'FNR == NR {
money[names++]=$2
next
}
# save max index to avoid using non-standard length(array)
END {
names=NR
}
{
l = $1 " " $2 " " $3
for (i=0; i < names; i++) {
if ($2 <= money[i] && $3 >= money[i]) {
fruit=$1
fruitcharacter=${fruit:($3-money[i]-1):1}
l = l " " $fruitcharacter
} else {
l = l " x"
}
}
print l
}' money.txt range.txt
결과 는 것을 보여 주었다. 그러나 내가 알고 있듯이 ${string: index: length}
을 사용하여 문자열의 문자를 추출 할 수 있으며, 왜이 상황에서 작동하지 않는지 알 수 없습니다. 이 문제를 해결하도록 도와 주시겠습니까? 고맙습니다.
awk 스크립트의 시작에서 14 줄을 카운트하면 awk에 대한 구문 넌센스 인'fruitaracter = $ {fruit : ($ 3-money [i] -1) : 1}'행을 얻습니다. 문법 에러 출력 메세지 "아시다시피, 우리는 문자열의 문자를 추출하기 위해'$ {string : index : length} '를 사용할 수 있습니다."그러나 그건 사실이 아닙니다. (힌트 : ** awk는 껍데기가 아닙니다! **). Arnold Robbins의 Effective Awk Programming, 4th Edition을 읽어보십시오. –
@ Edmonton 감사합니다. 나는 몇 가지 개념을 혼합한다. – lightsnail