[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 책을 빌려야 겠네요. !

이 정보도 감사드립니다!

왕새우를 좋아합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.