Создайте файл со следующим кодом. Вы можете сохранить его как:
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.