我可以在awk中设置仅在第一行出现的常量吗?

时间:2013-07-11 18:27:27

标签: bash unix awk gawk

我有一个文件,其中所有行都相同但第一行有一组常量我想用于所有其他字段。

File.txt (制表符分隔)

  

A B C 1 2 3 4

     

D E F

     

G H I

我希望结果符合

的要求

ExpectedOutcome.txt

  

1 2A B 3 C 4

     

1 2D E 3 F 4

     

1 2G H 3 I 4

我当前的代码只会正确处理第一行,然后退出

ActualOutcome.txt

  

1 2A B 3 C 4

代码

#!/bin/sh
Begin{FS="\t";OFS="\t"}
{
      if(NR=1){
           FirstConstant=$4;
           SecondConstant=$5;
           ThirdConstant=$6;
           FourthConstant=$7;
       }
       if($1){
            Combo=SecondConstant $1;
        }
        print FirstConstant, Combo, $2, ThirdConstant, $3, FourthConstant;
  }

1 个答案:

答案 0 :(得分:4)

使用awk

# space separatered output
$ awk 'NR==1{a=$4;b=$5;c=$6;d=$7}{print a,b$1,$2,c,$3,d}' file
1 2A B 3 C 4
1 2D E 3 F 4
1 2G H 3 I 4

# tab separatered output
$ awk 'NR==1{a=$4;b=$5;c=$6;d=$7}{print a,b$1,$2,c,$3,d}' OFS='\t' file
1   2A  B   3   C   4
1   2D  E   3   F   4
1   2G  H   3   I   4