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

Bash 我可以在awk中设置仅出现在第一行的常数吗?,bash,unix,awk,gawk,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 我的当前代码将只正确处理第一行,然后退出 actualoutcom.txt 1 2A B 3 C 4 代码 #!/bin/sh Begin{FS="\t";OFS="\t"} { i

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

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

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

actualoutcom.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;
  }
使用
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
使用
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