파일 중간에 텍스트를 삽입하고 싶습니다. 삽입 할 텍스트는 " <begin>
" 와 같이 특정 줄 뒤에 있습니다 . 줄 번호도 모르고 삽입 할 텍스트의 줄 수도 모릅니다. " <begin>
"라는 줄 뒤에 다른 파일의 내용을 삽입해야 한다는 것만 알고 있습니다.
나는 이런 일을하기 위해 awk를 사용하는 방법을 모른다.
감사 :-)
다음 코드를 사용하여 파일을 만듭니다. 다음과 같이 저장할 수 있습니다.
insertfile.awk (또는 원하는대로)
BEGIN{
while ( (getline < outerfile) > 0 )
{
if ($0 == matchline)
{
if ("after" == includematch)
{
print
}
if ("before" == includematch)
{
holdline = $0
}
while ( (getline < innerfile) > 0)
{
print
}
close(innerfile)
if ("before" == includematch)
{
print holdline
holdline = ""
}
}
else
{
print
}
}
close(outerfile)
}
사용되는 awk 명령 줄 매개 변수는 다음과 같습니다.
-v outerfile="file1.txt" This is the name of the file you are searching (and printing).
-v innerfile="file2.txt" This is the name of the file you will insert when you file a match
-v matchline="Search Text" This is what you will search for as a line in file1.txt
-v includematch="before" Optional: insert the file, before the matchline
-v includematch="after" Optional: insert the file, after the matchline
-v includematch="" If "includematch" is any other value, or empty, or not present,
then insert the file, REPLACING matchline.
-f "insertfile.awk" This is the name of the awk command file.
그런 다음 사용하려면 다음과 같이 awk를 호출합니다.
awk -v outerfile="file1.txt" -v innerfile="file2.txt" -v matchline="cat" -f "insertfile.awk"
(Read and print "file1.txt". Search for line containing only "cat". REPLACE "cat" lines with "file2.txt"
awk -v outerfile="file1.txt" -v innerfile="file2.txt" -v matchline="dog" -v includematch="before" -f "insertfile.awk"
(Read and print "file1.txt". Search for line containing only "dog". Insert "file2.txt" Before matched line.
awk -v outerfile="file1.txt" -v innerfile="file2.txt" -v matchline="bird" -v includematch="after" -f "insertfile.awk"
(Read and print "file1.txt". Search for line containing only "bird". Insert "file2.txt" After matched line.
awk 스크립트에서 다음과 같이 편집 할 수 있습니다.
Change $0 to $1 or $2 or other to match a specific word instead of the whole line.
"hard-code" the file-names instead of outerfile and innerfile if you wish.
입력 데이터를 파일에서 가져 오는 대신 스크립트로 "파이프"하려면 다음과 같이 insertfile.awk 스크립트를 편집합니다.
{
if ($0 == matchline)
{
if ("after" == includematch)
{
print
}
if ("before" == includematch)
{
holdline = $0
}
while ( (getline < innerfile) > 0)
{
print
}
close(innerfile)
if ("before" == includematch)
{
print holdline
holdline = ""
}
}
else
{
print
}
close(outerfile)
}
그런 다음 사용하려면 다음과 같이 awk를 호출합니다.
type "somefile.txt" | awk -v innerfile="file2.txt" -v matchline="cat" -f "insertfile.awk"
(Read and print STDIN. Search for line containing only "cat". REPLACE "cat" lines with "file2.txt"
type "anyfile.txt" | awk -v innerfile="file2.txt" -v matchline="dog" -v includematch="before" -f "insertfile.awk"
(Read and print STDIN. Search for line containg only "dog". Insert "file2.txt" Before matched line.
type "otherfile.txt" | awk -v innerfile="file2.txt" -v matchline="bird" -v includematch="after" -f "insertfile.awk"
(Read and print STDIN. Search for line containg only "bird". Insert "file2.txt" After matched line.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다