【问题标题】:How to change a value on a specific field with specific condition [closed]如何在特定条件下更改特定字段的值[关闭]
【发布时间】:2019-03-30 23:33:47
【问题描述】:

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

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 顺便说一句。

谢谢!

【问题讨论】:

  • 添加特定的 shell 或工具标签,如 bash 或 sh 或 sed 或 awk 或 C。linux 只是一个操作系统。您可以发布从您提供的输入中获得的示例输出吗?我不明白“字段 4”在哪里。你是说第四栏?
  • 这是vim吗??............
  • 是的,卡米尔,第 4 栏。
  • 我无法理解 NULL 字符在哪里......你能添加一个十六进制转储吗?
  • 听起来像是一道作业题...How do I ask homework questions on Stack Overflow。你应该努力。

标签: linux bash awk sed sh


【解决方案1】:

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

【讨论】:

  • 谢谢 Steffen,我可以在条件 '$1=="specific_keyword" 中使用通配符 * 吗?这是因为对于字段 1(第 1 列),涉及的字符更多,并且都具有不同的值但具有相同的关键字。
  • 您需要制定一个正则表达式。 任何字符 例如将是.*
  • 好的,我找到了一个很好的正则表达式,因为我需要过滤掉它们关键字=视频正则表达式将是 $1 ~ /video/ 答案是 c/o steeldriver
猜你喜欢
  • 2020-11-25
  • 2021-11-16
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
相关资源
最近更新 更多