bash 와 awk를 이용해서 특정 부분을 추출해서 저장할려면...
글쓴이: yuni / 작성시간: 화, 2004/06/22 - 7:07오전
현재 상황은 다음과 같습니다.
파일 A.inp에 첫번째 열에는 79부터 88번까지의 숫자가 반복이 됩니다. 두번째 세번째 네번째 열에 있는 숫자가 추출을 원하는 데이타입니다.
이것을 뽑아서 각각의 파일로 만들고 싶습니다. 만약에 79번을 만나면 B79.out이런 파일 형식으로 같은 행에 있던 두,세,네번째 데이타를 여기에다가 저장하고 싶군요.
이 일을 88번까지 반복하고 싶습니다.
문제점은 두가지인 것 같습니다. :roll:
일단 for 문이 돌지를 않습니다.
전혜진씨가 올린 베쉬 프로그래밍 입문 하우투를 보면
#!/bin/bash for i in 'seq 1 10'; do echo $i done
변수 i에 1 부터 10 까지 하나씩 들어가서 출력을 하는 것인 것 같은데 i에는 seq 1 10이 한번에 다 들어가 버립니다.
두번째 문제는 gawk문법인데,
gawk '{if ($1==79) print ($2,$3,$4)}' A.inp > B79.out
라도 해야 되는 것 같은데,
그러면 bash안에서는 79 대신에 $i 를 쓰고 나머지 $2, $3,$4는 어떻게 알려 줘야 될까요. 이것이 변수가 아니라 gawk 하에서는 2열, 3열, 4열을 의미한다는 것을 말입니다.
막 shell을 시작한 입장이라 개념 부터 문제일 수 있습니다.
어떤 답변도 초보자에겐 큰 도움이 될 것입니다.
Forums:
[code:1]#!/bin/bash for i in 'seq 1
에서 'seq 1 10' 이 아니라 `seq 1 10`
tab key 위에 있는 역따움표를 써야 하구요..
awk 안에서 shell 변수를 사용하려면
와 같이 쓰시면 됩니다.
>/dev/null 2>&1
정말 감사합니다.
신의 손이 시군요. 덕분에 엄청 버벅거리다가 해법을 알게 되어 기쁩니다. :D
==========================
부양가족은 많은데, 시절은 왜 이리 꿀꿀할까요?
=====================
"지금하는 일을 꼭 완수하자."
seq 라는 명령어가 있는줄은 오늘 첨 알았군요.전 이럴경우 다 쳤는
seq 라는 명령어가 있는줄은 오늘 첨 알았군요.
전 이럴경우 다 쳤는데....하하
VENI, VIDI, VICI - Caesar, Gaius Julius -
awk안에서 shell 변수를 쓰려면
표준 awk는 잘 모르겠으나
gawk 는 -v 옵션을 지원합니다.
gawk -v FOO=$VAR 어쩌고저쩌고~
하면 쉘환경변수 VAR값을 awk내부의 FOO 변수값으로 가져가서
쓸 수 있습니다.
넘기는 값이 여러값이라면 쉘스트립트로 적절히 루프 돌리면서
값을 넘겨 주면 되겠네요.
흐음...
저는
yes "" | head -n456 | cat -n | sed -n -e '123,456p'
과자가 아닙니다.
cuckoo dozen, 즉.12마리의 뻐꾸기란 뜻입니다.
댓글 달기