如何在具有特定条件的特定字段上更改值

时间:2018-10-26 08:40:18

标签: linux bash awk sed sh

我正在寻找是否有人可以帮助我修改特定字段上的特定值。一个具体的例子是:

thissample000     0field2     00field3     11
field1sample0     0field2     00field3     11
thissample000     0field2     00field3     0
field1sample0     0field2     00field3     11
thissample000     0field2     00field3     0
field1sample0     0field2     00field3     0
field1sample0     0field2     00field3     11
field1sample0     0field2     00field3     11
field1sample0     0field2     00field3     0
thissample000     0field2     00field3     0
thissample000     0field2     00field3     11
thissample000     0field2     00field3     11
field1sample0     0field2     00field3     11
field1sample0     0field2     00field3     0
thissample000     0field2     00field3     11

从以上所述,我仅需要修改字段4(第4列)的值为0,但仅当字段1(第1列)为thissample000时才需要修改。 我不能使用sed命令,因为所有字段的字符都为0,并且由于有数千行,所以无法手动编辑它。 寻求您的帮助。这是通过LINUX btw。

谢谢!

1 个答案:

答案 0 :(得分:1)

awk中,这似乎很简单:

awk '$1=="thissample000"{$4="0"}1' file

但这会重新格式化输出。因此,我们需要使用其split实现的gawk:

awk '$1=="thissample000"{split($0, a, FS, seps); a[4]="0"; for (i=1;i<=NF;i++) printf("%s%s", a[i], seps[i]);print"";next}1' file