将字符串附加到特定字段中的特定记录

dis*_*lus 1 unix bash shell scripting awk

我有一个看起来像的文件

No. 1 2 3 4 5
1 1 0 1 0 1
5 0 0 0 0 0
7 1 1 1 0 1
8 0 1 1 0 1
9 1 1 0 0 0
6 0 0 0 0 0
4 0 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

我想附加一个文本,让我们说第一行中所有项目前面的var除了前几个(比方说2,这个数字不同),这样我的文件看起来像

No. 1 var2 var3 var4 var5
1 1 0 1 0 1
5 0 0 0 0 0
7 1 1 1 0 1
8 0 1 1 0 1
9 1 1 0 0 0
6 0 0 0 0 0
4 0 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

我尝试使用awk语句

awk '{ if(NR==1) for (i = 1; i <= NF; i++) 
 print  "var"$i; 
  for (j = 2; j <= NR; j++) print $0 }' input
Run Code Online (Sandbox Code Playgroud)

但我没有得到预期的结果.有没有更简单的方法来做到这一点?

Arj*_*Dan 6

awk 'NR==1{for(i=3;i<=NF;i++) {$i = "var" $i}}1' File
Run Code Online (Sandbox Code Playgroud)

逻辑:

`NR==1` => If Line 1, from 3rd field (`i=3`) to end of line (`i=NF`), change `i`th field to `varith field`.
Run Code Online (Sandbox Code Playgroud)

例:

~$ cat File
No. 1 2 3 4 5
1 1 0 1 0 1
5 0 0 0 0 0
7 1 1 1 0 1
8 0 1 1 0 1
9 1 1 0 0 0
6 0 0 0 0 0
4 0 0 1 0 1
~$ awk 'NR==1{for(i=3;i<=NF;i++) {$i = "var" $i}}1' File
No. 1 var2 var3 var4 var5
1 1 0 1 0 1
5 0 0 0 0 0
7 1 1 1 0 1
8 0 1 1 0 1
9 1 1 0 0 0
6 0 0 0 0 0
4 0 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

您可以i根据需要更改价值.