2010-07-26 4 views
1

awk (POSIX)에서 scanf() (C와 유사) 구현이 있습니까?scanf, awk의 역 참조

awk에는 sed 및 perl과 같은 역 참조가 없다는 것을 알고 있습니다. awk에서 시뮬레이션하는 가장 쉬운 방법은 무엇입니까?

감사

답변

3

의 sprintf()의 printf() 당신이 찾고있는 무엇을 할 수있다. awk는 역 참조를 지원하지 않지만 gawk의 gensub() 또는 gsub()는 역 참조를 제공 할 수 있습니다.

역 참조는 일치하는 문자열 만 저장합니다. 그래서, AWK의 능력의 제작 사용 예 물론

$ echo "test.txt" | sed 's/\(.*\).txt/\1.pdf/' 
test.pdf 

$ echo "test.txt" | awk -F"." '{$NF="pdf"}1' OFS="." 
test.pdf 

, 이것은 단순한 예입니다 .. 갈 OFS, FS, ORS 등 같은 방법을 내부 변수를하는 사용, 필드 및 필드 구분 기호를 구별합니다. 그러나 당신은 아이디어를 얻습니다.

+0

ya 나는 awk의 printf 패밀리를 알고 있습니다. 하지만 scanf ?? – Nyan

+0

getline을 사용하여 사용자 입력을 가져온 다음 sprintf를 적절한 형식 지정자와 함께 사용하고 변수 – ghostdog74

+1

에 저장합니다. 'gsub'는 역 참조를 제공하지 않습니다. 그것들을 직접 얻으려면 gawk 확장자'gensub' (BusyBox와 같은 다른 awk에서도 사용 가능) 또는 gawk의 선택적인 3 번째 인수 인'match'를 사용해야합니다. * gsub을 사용하여 같은 것을 수동으로 구현할 수 있습니다. 이식성이 향상됩니다. 그러나, 그것은 단순한 한 - 라이너가 아닙니다. – dubiousjim