【问题标题】:to copy specific line numbers from one file to specific line numbers of another file using awk使用 awk 将特定行号从一个文件复制到另一个文件的特定行号
【发布时间】:2015-05-06 09:03:45
【问题描述】:

我有一个包含 71 行的 .txt 文件,还有另外 12 组文件(file1 到 file12)。我想将 .txt 文件中的前 5 行复制到特定行号的 file1,类似地,将 .txt 文件中的下 5 行复制到特定行号的 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个文件。

示例文件(12 个文件;file1、file2...)

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

文件(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

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

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

【问题讨论】:

  • 有很多方法可以做到这一点。但是,这将是一个很好的开始,看看您到目前为止尝试了什么以及您在执行过程中发现了哪些问题。另外,请参阅How do I ask a good question? 以正确询问。
  • split -l 5 input_file 将是您最好的选择,尽管您可能被告知使用 awk 作为学习练习。如果是这样的话,我同意@fedorqui,你真的需要自己尝试一下。
  • 你能提供一些示例输入和输出吗?
  • 示例输入文件 (.txt) abc = 1,2,3 def = 4,5,6 dfg = 2,3,4 tyu = 8,7,6 rty = 5,6,7示例输出文件(12files、file1、file2)...................................................... ........ abc = 4,1,3 def = 1,2,6 dfg = 28,36,4 tyu = 68,47,6 rty = 65,6,97(我不知道如何正确输入)
  • @Helloo 再次,请edit 您的问题显示此输入。我们无法读取 cmets 中的代码

标签: linux bash unix awk


【解决方案1】:

你需要的是这样的(使用 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

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

【讨论】:

  • 非常好心,如果你能解释一下你提供的代码...谢谢
  • @Helloo 当您尚未发布请求的可测试输入/输出时,我不愿意花时间在上面,所以我什至不知道我发布的内容是否真正解决了您的问题问题。在您编辑问题以提供所需信息后,我会再看一遍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2019-05-27
  • 2021-03-16
  • 2017-04-23
  • 2014-01-26
  • 2014-02-24
相关资源
最近更新 更多