使用awk将特定行号从一个文件复制到另一个文件的特定行号

时间:2015-05-06 09:03:45

标签: linux bash unix awk

我有一个包含71行的.txt文件,还有另外12组文件(file1到file12)。我想将.txt文件中的前5行复制到特定行号上的file1,然后再将特定行号从.txt复制到file2,依此类推。

这是我目前的代码:

n = 1
sed -i '52,56d' $dumpfile 
awk'{print $'"$n"',$'"$n+1"',$'"$n+2"',$'"$n+3"'}' sample.txt > $dumpfile
n=$(($n + 1))

$dumpfile我已经放了12个文件。

示例文件(12files; file1,file2 ...)

...........  
................  
..............  
abc = 4,1,3  
def = 1,2,6  
dfg = 28,36,4  
tyu = 68,47,6  
rty = 65,6,97 

file(sample.txt)

abc = 1,2,3  
def = 4,5,6  
dfg = 2,3,4  
tyu = 8,7,6  
rty = 5,6,7

abc = 21,2,32  
def = 64,53,6  
dfg = 28,3,4  
tyu = 18,75,6  
rty = 5,63,75

...........  
...........  

我想用五行sample.txt文件替换这五行(file1 ... file12)。在file1到file12中要替换的行数在所有12个文件中是相同的,其中在sample.txt文件中,第一组5行将进入file1,第二组5行将进入file2,依此类推至file12

1 个答案:

答案 0 :(得分:0)

你需要的是这样的东西(使用GNU awk进行ARGIND和现场编辑):

awk -i inplace -v start=52 '
NR==FNR {new[NR]=$0; next}
FNR==start {print new[ARGIND-1]; c=5}
!(c&&c--)
' RS="" sample.txt RS='\n' file1 file2 ... file12

但是在你发布一些可测试的样本输入和相关输出之前,它只是一个猜测,显然是未经测试的。