bash 스크립트 작성 시 구문 찾기 및 복사

gksrb500의 이미지

안녕하십니까

리눅스를 시작한지 얼마 안되고 스크립트 작성을 독학하고 있어 어려움이 많이 있어 선배님들께 여쭤볼 것이 있어 작성합니다.

제가 스크립트를 통해서 하고싶은 것은 "파일 안에 있는 여러가지 'HF='라는 문자 중 마지막 "HF="의 뒤에 있는 숫자 8자리까지를 복사하기" 입니다.

어떻게 하면 될지 감이 잡히지 않아 여쭤봅니다.

ymir의 이미지

$ cat in.txt
HF=1234
NHF=5678
HF=1234567890abc
HF=12345678
HF=9876543210
$ grep -o '\bHF=[0-9]\+' in.txt
HF=1234
HF=1234567890
HF=12345678
HF=9876543210
$ grep -o '\bHF=[0-9]\+' in.txt | tail -1
HF=9876543210
$ grep -o '\bHF=[0-9]\{8\}' in.txt
HF=12345678
HF=12345678
HF=98765432
$ grep -o '\bHF=[0-9]\{8\}' in.txt | tail -1
HF=98765432

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

gksrb500의 이미지

답변 정말 감사드립니다. 이것을 토대로 제가 작성을 해보았습니다.

#!/bin/bash

FOLDER_NAME=$(basename $(dirname $(realpath $0)))
echo $FOLDER_NAME

for i in {1..15}
do
cd /home/Gaussian09/Si1N/$i
grep -o '\bHF=[0-9]\{8\}' $FOLDER_NAME_$i.log | tail -1
done

이렇게 했는데 $FOLDER_NAME 이 적용이 안되고 $i 만 읽히는 것 같습니다.

또한 이 grep해서 얻은 'HF='을 삭제하고 숫자만 복사해서 변수로 놓고싶습니다.

ENERGY를 변수로 놓는다면

ENERGY=grep -o '\bHF=[0-9]\{8\}' in.txt | tail -1
echo $ENERGY

하면

98765432

만 출력되게 하고 싶습니다.

가능할까요...?

ymir의 이미지

$ grep -o '\bHF=[0-9]\{8\}' ${FOLDER_NAME}_$i.log | tail -1
 
$ ENERGY=$(grep -o '\bHF=[0-9]\{8\}' in.txt | tail -1 | cut -d= -f2)

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

gksrb500의 이미지

정말 감사드립니다.

출력에 성공하였습니다.

그런데 소수점 밑으로는 출력이 되지 않는데, 이는 어떻게 해결해야하나요?

Search 하는 파일 내부에 제가 원하는 부분을 여기에 적으면,

231133\H,0,-1.322948,-0.663849,0.\\Version=EM64L-G09RevD.01\State=1-A'
\HF=-346.5488813\RMSD=1.335e-09\Dipole=-0.3645779,1.3116655,0.\Quadrup
ole=-1.3299859,0.8147191,0.5152667,-1.4668375,0.,0.\PG=CS [SG(H1N1Si1)
,X(H4)]\\@

여기서 두번째 줄에 있는 HF=-346.548813 여기서 -346.548813 을 출력하고 싶습니다.

또한 동일한 파일에서

free energy TOTEN = -175.88841405 eV

이렇게 된 숫자도 읽고싶은데 띄어쓰기로 인해서 찾지를 못하는 것 같습니다. 여기서 숫자만 읽을 수 있는 방법은 어떻게 할 수 있을까요?

ymir의 이미지

$ cat in.txt
231133\H,0,-1.322948,-0.663849,0.\\Version=EM64L-G09RevD.01\State=1-A
\HF=-346.5488813\RMSD=1.335e-09\Dipole=-0.3645779,1.3116655,0.\Quadrup
ole=-1.3299859,0.8147191,0.5152667,-1.4668375,0.,0.\PG=CS [SG(H1N1Si1)
,X(H4)]\\@
free energy TOTEN = -175.88841405 eV
 
$ cat in.txt | grep -o '\bHF=[-.0-9]\+' | cut -d= -f2
-346.5488813
$ cat in.txt | grep -o '\bTOTEN\s*=\s*[-.0-9]\+' | sed 's/ //g' | cut -d= -f2
-175.88841405

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

gksrb500의 이미지

완벽하게 제가 원하는 대로 됐습니다!

진심으로 감사드립니다. 선배님

chanik의 이미지

이런 질문은 처음부터 샘플데이터를 함께 올리시는게 좋습니다. 말로만 표현하시면 상황을 상상해서 샘플부터 준비해야 하므로 답변할때 노력이 더 들어가고, 방향이 어긋나 서로 힘이 빠지는 일도 생길 수 있습니다. 비슷한 질문인 https://kldp.org/node/155645 참고하시면 질문글만 보고도 상황이 파악되죠.

그리고, 코드나 실행로그 등을 올릴때는 아래와 같이 code 태그로 감싸면 보기 좋게 올라갑니다 (lang은 명시하지 않아도 syntax highlighting만 안 될뿐 레이아웃 유지는 됨). 글 올릴때 입력창의 안내 및 도움말 링크를 한 번 보시면 참고가 될 것입니다.

<code lang="bash">
for i in {1..15}
do
  cd /home/Gaussian09/Si1N/$i
  grep -o '\bHF=[0-9]\{8\}' $FOLDER_NAME_$i.log | tail -1
done
</code>

이렇게 올리시면 아래와 같이 나옵니다.

for i in {1..15}
do
  cd /home/Gaussian09/Si1N/$i
  grep -o '\bHF=[0-9]\{8\}' $FOLDER_NAME_$i.log | tail -1
done
gksrb500의 이미지

네 알겠습니다.

다음부터 질문에 말씀하신 것처럼 올리겠습니다.

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.