[awk or sed] 파일안에 있는 글자 바꾸기

rimuzzang의 이미지

또 질문입니다.

예를 드는 것이 가장 빠를것 같군요.

data.txt

name choi age 24 grade D
name hong age 22 grade C
name min age 28 grade A

이렇게 저장되어 있다고 할 때

쉘 스크립트에서 2번째 라인의 hong 과 22 와 C를 다른
정보로 바꾸고 싶다고 하면 어떻게 하면 좋을까요?

입력으로는 line 번호를 변수로 받습니다.

read INPUT_NUMBER

input_data # 정보들을 받아서 변수에 넣는 함수

#INPUT_NAME, INPUT_AGE, INPUT_GRADE에 저장

sed ?

-----------------------------------------------------------------------

별의별 시도를 다해봤습니다만 실패해서 결국 질문을 하여 봅니다.

심지어

sed "$INPUT_NUMBER q" | awk '{print $2}' > temp

이런식으로 파일에 저장했다가 다시 불러오는 비효율적인

코드를 양산해보았으나 실패하였습니다.

monpetit의 이미지

#!/bin/sh

read num

name=foo
age=bar
grade=baz

awk -v num=$num -v name=$name -v age=$age -v grade=$grade '{if (NR == num) {$2 = name; $4 = age; $6 = grade;} print $0}' data.txt > data.txt.new

이런 식으로 일단 shell script의 변수를 awk로 전달해 주는 게 필요합니다.
그런 다음에 필요한 라인을 만나면 필드값을 변경해 주고 그렇지 않으면 그냥 통과시킵니다.
출력을 새로운 파일로 리다이렉션한 다음 파일명을 다시 바꿔 주어야 하는 귀찮음은 여전히 남아 있습니다만 이정도면 괜찮지 않을까 싶네요. :)

꼭 sed와 awk를 고집해야 할 이유가 없다면 perl이나 다른 스크립트도 고려해볼만 합니다.

rimuzzang의 이미지

계속 같은 분이 대답해주시네요.

감사합니다. !

말씀하신 perl 책을 빌려야 겠네요. !

이 정보도 감사드립니다!

왕새우를 좋아합니다.