【问题标题】:Append to certain line of file with awk, leaving non-matching lines unchanged使用 awk 附加到文件的某些行,使不匹配的行保持不变
【发布时间】:2017-09-20 06:22:03
【问题描述】:

给定文件 test 及其内容:

bcd://dfl
sf

我想将额外信息附加到具有特定内容的行(以bcd开头) 虽然以下脚本有效

awk '/bcd*/ {print $0", extra information"} ' test > test.old && mv test.old test

它会删除不匹配的行。 (sf)

是否可以将它们保存在输出文件中?

【问题讨论】:

  • ", extra information" 附加到$0 并在} 之后输出1。还要修复/bcd*/,它匹配任何带有bc 的字符串。您的意思可能是/^bcd.*/,但/^bcd/ 就足够了。
  • next 添加到操作块中,并在默认打印之后添加一些真实的内容以导致打印:awk '/^bcd/ {print $0", extra information"; next} 1'

标签: linux awk text-processing


【解决方案1】:

正如 所讨论的,在 cmets 中在末尾附加 {..}1 将解决您的问题,

awk '/^bcd/ {print $0", extra information"; next} 1' file

因为/<pattern>/{<action>} 应用于与<pattern> 匹配的行,所以其他行只是按原样打印,{..}1always-true-no -matter-what 打印行的条件。

【讨论】:

    【解决方案2】:
    awk '/^bcd/ {$0 = $0 ", extra information"} 1' test
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多