모든 전문가
같은 디렉토리에 두 가지 유형의 파일이 있습니다
예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 ...