【问题标题】:Copy 6th value of last line of text file, paste into another existing file复制文本文件最后一行的第 6 个值,粘贴到另一个现有文件中
【发布时间】:2013-09-20 17:58:57
【问题描述】:

假设我有一个文件copy_pars.txt,我想提取最后一行的第 6、第 7 和第 8 个值,如下所示:

detector xxx xxx xxx xxx XXX XXX XXX xxx xxx

XXX 值是我要复制的值。除了第一个“detector”之外,所有值都是未知的浮点数或整数,长度未知。它们由单个空格分隔。

我有第二个文件,paste_pars.txt,我想在其中搜索以“detector”开头的 FIRST 行,并替换该行的第 6、第 7 和第 8 个值来自copy_pars.txt

我更喜欢使用sedawk,但欢迎提出建议。谢谢。

【问题讨论】:

    标签: replace sed awk text-processing


    【解决方案1】:

    试试这条线:

    awk 'NR==FNR{f6=$6;f7=$7;f8=$8;next}!f&&/^detector/{f=1;$6=f6;$7=f7;$8=f8}7' copy.txt paste.txt
    

    没有测试,但应该可以满足您的要求。

    【讨论】:

    • 谢谢@Kent,工作得很好,只是没有更改paste_pars.txt,而是直接将整个内容输出到终端。我是 bash 的新手(显然是 awk);如何更新paste_pars.txt 而不向终端输出任何内容?
    • 好的,我想我已经回答了我自己的问题。我必须重写一个新文件,然后重命名这个新文件以覆盖以前的文件:awk 'blah blah' copy_pars.txt paste_pars.txt > paste_pars_new.txt && mv paste_pars_new.txt paste_pars.txt如果有人知道更好的方法,请告诉我!
    【解决方案2】:
    awk 'NR==FNR{split($0,a);next} !f && /^detector/{for (i=6;i<=8;i++) $i=a[i]; f=1} 1' copy_pars.txt paste_pars.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2020-11-06
      • 2011-06-04
      相关资源
      最近更新 更多