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

时间:2014-12-08 10:09:55

标签: bash shell unix awk scripting

我有一个看起来像

的文件
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

我想附加一个文本,让我们说第一行中所有项目前面的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

我尝试使用awk语句

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

但我没有得到预期的结果。有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:6)

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

<强>逻辑:

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

示例:

~$ 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

您可以根据需要更改i的值。

答案 1 :(得分:3)

试试这一行:

awk -v val=2 'NR==1{for(i=1;i<=NF;i++)$i=($i>=val?"var"$i:$i)}7' file

使用所需的值更改变量val=2