使用awk替换列

时间:2014-11-11 04:17:30

标签: linux bash unix awk

我有3个文件

1文件

 14/09/15
 14/09/15
 14/09/15
 14/09/15
 14/09/15

2file

14/09/01 
14/09/01
14/09/01
14/09/01
14/09/01

和3file

15/09/14,11-37,01/09/14,1224A,0G,71%,RGS
15/09/14,11-41,01/09/14,2700A,0G,94%,RAN
15/09/14,11-43,01/09/14,2701A,0G,100%,RAN
15/09/14,11-44,01/09/14,2701B,0G,92%,RAN
15/09/14,11-46,01/09/14,2708A,0G,88%,RAN

我需要将3f中的第1列替换为1f中的第1列,将第3列中的第3列替换为第2列中的第1列

如何使用awk替换?

1 个答案:

答案 0 :(得分:1)

以下awk代码将非常有用

$ awk   'BEGIN{OFS=FS=","}NF==1{line[FNR]=line[FNR]","$0} NF>1{split(line[FNR], a); $1=a[2]; $2=a[3]; print $0}' 1file 2file 3file
14/09/15,14/09/01,01/09/14,1224A,0G,71%,RGS
14/09/15,14/09/01,01/09/14,2700A,0G,94%,RAN
14/09/15,14/09/01,01/09/14,2701A,0G,100%,RAN
14/09/15,14/09/01,01/09/14,2701B,0G,92%,RAN
14/09/15,14/09/01,01/09/14,2708A,0G,88%,RAN

它的作用??

  • OFS=FS=","将输出字段分隔符OFS和字段分隔符FS设置为,

  • NF==1{line[FNR]=line[FNR]","$0}如果字段数/ columsn数NF为1,请将值保存在逗号分隔的line变量中

  • NF>1{split(line[FNR], a); $1=a[2]; $2=a[3]; print $0}NF大于一个

    时执行操作
    • split(line[FNR], a);line变量拆分为数组a

    • $1=a[2]; $2=a[3];设置第一列和第二列

    • print $0打印整个记录