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

Linux 如何更改具有特定条件的特定字段上的值,linux,bash,awk,sed,sh,Linux,Bash,Awk,Sed,Sh,我正在寻找是否有人可以帮助我修改特定字段上的特定值。具体的例子如下: thissample000 0field2 00field3 11 field1sample0 0field2 00field3 11 thissample000 0field2 00field3 0 field1sample0 0field2 00field3 11 thissample000 0field2 00

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

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
从上面可以看出,我只需要修改值为0的字段4(第4列),但仅当字段1(第1列)是thissample000时才需要修改。 我不能使用sed命令,因为所有字段都有0个字符,并且我不能手动编辑它,因为有数千行。 寻求你的帮助。这是通过LINUX btw实现的


谢谢

awk
中,这似乎是非常直截了当的:

awk '$1=="thissample000"{$4="0"}1' file
但这改变了产出。因此,我们需要gawk的
split
实现:

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

awk'$1==“thissample000”{split($0,a,FS,seps);a[4]=“0”;for(i=1;iAdd特定的shell或工具标记,如bash或sh或sed或awk或C.
linux
只是一个操作系统。您能发布您提供的输入实现的示例输出吗?我不理解“字段4”的位置是的。你指的是第四列吗?是的,卡米尔,第四列。我不明白空字符在哪里…你能添加十六进制转储吗?听起来像是一个家庭作业问题…你需要努力。谢谢你Steffen,我能用通配符*表示条件“$1=”specific_关键字“?这是因为字段1(第1列)还有更多的字符,它们都有不同的值,但有相同的关键字。你需要制定一个正则表达式。例如,任何字符都是
*
。好的,我找到了一个好的正则表达式,因为我需要过滤掉它们。关键字=视频正则表达式是$1~/video/答案是c/o