![](/img/trans.png)
[英]insert the contents of a file to another (in a specific line of the file that is sent)-BASH/LINUX
[英]Insert content of file at specific line number of another file in LINUX/BASH
我有以下兩個文件 - 'tempFile' 和 'File1'
tempFile 01
tempFile 02
tempFile 03
tempFile 03
File1
@type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
File2
File3
@type ABCDF
File4
@type ABCDF
File5
我嘗試使用以下腳本在第一次出現語句“@type ABCD”時將“tempFile”的內容插入到另一個文件“File1”中
lineNumber=$(grep -n -m 1 '@type ABCD' File1 | awk -F':' '{print $1}' | head -1)
sed -i "${lineNumber}r tempFile" File1
但是,上面的腳本在 File1 中多次插入 tempFile 的內容,如下所述請幫我在 File1 中插入 tempFile 的內容一次/腳本生成以下輸出
File1
@type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
tempFile 01
tempFile 02
tempFile 03
tempFile 03
tempFile 01
tempFile 02
tempFile 03
tempFile 03
tempFile 01
tempFile 02
tempFile 03
tempFile 03
tempFile 01
tempFile 02
tempFile 03
tempFile 03
tempFile 01
tempFile 02
tempFile 03
tempFile 03
tempFile 01
tempFile 02
tempFile 03
tempFile 03
File2
File3
@type ABCDF
File4
@type ABCDF
File5
File1
@type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
tempFile 01
tempFile 02
tempFile 03
tempFile 03
File2
File3
@type ABCDF
File4
@type ABCDF
File5
這對我有用:
touch result #Intermediate file
lineNumber=$(grep -n -m 1 '@type ABCD' File1 | awk -F':' '{print $1}' | head -1)
head -n $lineNumber File1 >> result #First two lines
cat tempfile >> result #Append your tempfile
sed -n "3,`wc -l File1 | awk ' { print $1}'`p" File1 >> result #Rest of File1
mv result File1 #Rename it to File1
您可以使用awk
相當輕松地使用變量作為標志,以便在第一次出現"@type ABCDF"
后僅寫入一次tempfile
的內容。 方法很簡單,你用第一個{print}
規則輸出每一行,然后如果/@type ABCDF/ && n
,你用getline
從tempfile
讀取每一行並輸出它。 完成輸出文件后,您只需設置n=0
,它將跳過文件中所有其他出現的"@type ABCDF"
,例如
awk -vn=1 '{print}; /@type ABCDF/ && n{while (getline <"tempfile") print;n=0}' file1
示例 輸入文件 1
$ cat file1
File1
@type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
File2
File3
@type ABCDF
File4
@type ABCDF
File5
示例使用/輸出
$ awk -vn=1 '{print}; /@type ABCDF/ && n{while (getline <"tempfile") print;n=0}' file1
File1
@type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
tempFile 01
tempFile 02
tempFile 03
tempFile 03
File2
File3
@type ABCDF
File4
@type ABCDF
File5
您可以將輸出重定向到臨時文件,然后替換原始文件以模擬行的就地添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.