txt 파일에서 일부 텍스트를 추출하고 기존 파일 bash에 추가

txt 파일에서 일부 텍스트를 추출하고 기존 파일 bash에 추가

모든 전문가

같은 디렉토리에 두 가지 유형의 파일이 있습니다

예1) Record1.txt (레코드2, 레코드3, 레코드4 ...)

11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...

ex2) Summary1.txt (요약2, 요약3, 요약4​​...)

----some data is written---- 
.....
.....
***RESULT 111.114 30.344 90.3454***  OTHERNUMBER#1 OTHERNUMBER#2 ..... 
.....
.....

내가 하고 싶은 일은 추출이다.결과X(숫자) Y(숫자) Z(숫자)요약#.txt 레코드입니다. 그런 다음 해당 위치를 해당 레코드#.txt에 넣는데 아래와 같이 몇 가지 정보를 추가하고 싶습니다.

X Y Z
111.114 30.344 90.3459

11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...

따라서 최종 파일 Record#.txt가 위에 표시되기를 원합니다. 나는 sed와 cat을 시도했지만 둘 다 실패했습니다.

미리 감사드립니다!

답변1

내가 올바르게 이해했다면 내 제안은 다음과 같습니다.

for i in record*.txt; do
  xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)
  sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}
done

이름이 지정된 파일을 반복합니다.record*.txt

for i in record*.txt; do

RESULT와 사이의 문자열을 캡처합니다.***

xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)

파일의 첫 번째 줄에 XYZ를 추가하고 그 뒤에 캡처된 패턴을 추가합니다.summary*.txt

sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}

답변2

이는 고정 텍스트가 포함된 행( ) X Y Z과 한 파일의 단일 행 일부( SummaryX.txt) 및 관련 파일 이름이 있는 다른 파일의 전체 내용( ) recordX.txt을 단순히 연결한 것입니다.

#!/bin/sh

for sfile in Summary*.txt; do
  rfile="$(echo "$sfile" | sed -e 's/^Summary/record/')"
  ofile="$rfile.new"

  {
    echo X Y Z

    sed -E -n -e 's/^.*RESULT ([0-9.]+ [0-9.]+ [0-9.]+).*/\1/p' "$sfile"
    echo

    cat "$rfile"
  } > "$ofile"

  # uncomment the following to replace the original record file with the new one.
  # mv -f "$ofile" "$rfile"
done

어떤 쉘을 사용하고 있는지 명시하지 않았으므로 bash 관련 문자열 조작이나 기타 기능을 사용하지 않습니다. sh 호환 쉘과 함께 사용해야 합니다.

recordX.txt.new이 줄의 주석 처리를 제거하지 않으면 출력이 저장됩니다 mv. 이렇게 하면 요구 사항을 충족하는지 확인할 수 있습니다.앞으로원본 입력 파일이 손상됩니다. 잠재적으로 파괴적인 작업을 수행할 때는 항상 백업 복사본을 처리해야 합니다.

$ cat record1.txt.new 
X Y Z
111.114 30.344 90.3454

11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...

관련 정보