이 도움말은 도움이 되지만 여전히 약간 헤매고 있습니다. 나는 그것의 매우 간단한 형식을 훔칠 것입니다. 다른 파일의 패턴(태그) 앞에 한 파일의 내용을 삽입하는 방법은 무엇입니까?
두 개의 파일이 있습니다.
파일 1
test
test2
test3
test4
파일 2
Numebr of results: 0
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
Numebr of results: 0
Numebr of results: 0
원하는 최종 결과(파일 3?)
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
file1에서 한 번에 한 줄씩 읽고, "결과 수"의 다음 패턴을 찾고, 첫 번째 일치 항목 위의 file1에 line1을 삽입한 다음, 전체 파일을 순서대로 반복하려고 합니다.
미리 감사드립니다!
답변1
나는 사용하는 것이 좋습니다라인/변수/파일 가져오기형태awk
getline
$ awk '/^Numebr of results/ {if (getline line < "file1" > 0) print line} 1' file2
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
답변2
$ awk 'NR==FNR{A[NR]=$0;next}{if($0~/^Numebr of results/){i++;print A[i]}}1' file1 file2
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
답변3
로 수행할 수 있지만 더 적절할 것입니다 sed
:awk
에코 "--" | cat 파일 1 - 파일 2 | sed -n '1,/----/{H;d} /Numebr/ {x;s/^\n//;P;s /[^\n]*\n//;x;};
답변4
나는 단순히 파일 설명자를 관리하기 위해 서브쉘을 사용합니다. ("exec 3>&-" 필요 없음)
하위 프로세스에 상속된 파일 설명자
이러한 파일 설명자를 사용하는 경우 각 읽기 작업은 아래의 파일 위치를 이동합니다.
"e" 옵션은 패턴 공간 문자열을 sh의 명령으로 실행합니다.
sh$ ( exec 3< file2;
sed -r '
/^Number of results: [0-9]+/ {
h
s#.*#read line <\&3; echo -n "$line"#e
G
}
' file1;
)