2013-04-06 79 views
0

我有一个包含如下记录的两个文件:AWK命令从文件1更换第n个领域在第n行到file2

File1

1,2,3,a|x|z,4,5 

而且

File2

1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 

这里有6个域被分隔

如何更换第四个字段(即, a|x|z)在File2的第二,第三和第四行中,其中a,x和z分别来自File1

我真正的问题是,第四场不会是永远a|x|z但它始终是|分离

我认为产出将是如下。

File2

1,2,3,a|x|z,4,5 
1,2,3,a,4,5 
1,2,3,x,4,5 
1,2,3,z,4,5 
+0

你在这之前询问过什么? – FelipeAls 2013-04-06 21:38:25

+0

当您提到行号2,3,4时,我删除了空行。如果需要它们,您可以回滚编辑。 – 2013-04-06 21:46:05

+0

没问题。它的罚款,除非它很好理解 – kattashri 2013-04-06 21:53:54

回答

1
$ awk 'FNR==NR{split($4,f1,"|");next}FNR>1{$4=f1[FNR-1]}1' FS=, OFS=, file1 file2 
1,2,3,a|x|z,4,5 
1,2,3,a,4,5 
1,2,3,x,4,5 
1,2,3,z,4,5 

注意:这里假设在file1即3该数字的子场的等于在file2再次3(线2,3被替换的行数,4)。如果不是这种情况,你应该描述如果说子字段的数量仍然是3,但是文件中的行数是10,应该发生什么?

+0

非常感谢sudo :)我尝试使用拆分功能,但它总是试图取代整个领域。我想我需要更多地了解awk! – kattashri 2013-04-06 22:12:57

+0

没问题,看看http://www.gnu.org/software/gawk/manual/gawk.pdf – 2013-04-06 22:19:07

+0

是的,这是我现在面临的问题。它只适用于file1中的单个记录,我试图通过引用上面共享链接的文档来记录多个记录。 – kattashri 2013-04-08 04:20:37