AWK命令将第n个字段从file1替换为第n行的file2

时间:2013-04-06 21:36:59

标签: shell sed awk gawk

我有两个包含以下记录的文件:

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中的a,x和z分别替换File2的第2行,第3行和第4行中的第4个字段(即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

1 个答案:

答案 0 :(得分: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,会发生什么?