【问题标题】:how to substitute from a string to multiple patterns using awk/sed?如何使用 awk/sed 从字符串替换为多个模式?
【发布时间】:2016-02-08 17:47:56
【问题描述】:

我有一个 patternfile.txt。

1 FPAT = "pata"
2 FPAT = "patb"
3 FPAT = "patc"

还有一个 awkfile.txt。

BEGIN { FPAT }
{
    for(i=1; i<=NF; i++){
       print("%s\n", $i)}
 }

我想在将字符串 'FPAT' 替换为每个模式 pata、patb、patc 之后制作多个文件。

  1. awkfile1.txt:

    BEGIN { FPAT = "pata" }
    {
       for(i=1; i<=NF; i++){
           print("%s\n", $i)}
    }
    
  2. awkfile2.txt:

    BEGIN { FPAT = "patb" }
    {
        for(i=1; i<=NF; i++){
            print("%s\n", $i)}
     }
    
  3. awkfile3.txt:

    BEGIN { FPAT = "patc" }
    {
         for(i=1; i<=NF; i++){
             print("%s\n", $i)}
    }
    

    请帮助我。

【问题讨论】:

  • 真的不清楚你想做什么。你想要的输出是什么?
  • 你知道FPAT是一个gawk内置变量名吗?这真的是你想要修改的吗?如果不是,这就是为什么你不应该将你的变量全部命名为大写,以避免与你可能不知道存在的内置变量名发生冲突。

标签: awk sed xargs


【解决方案1】:

我感觉这有点像XY problem,但我认为您可以通过一次 awk 调用获得所需的输出:

awk '{ print "BEGIN { " substr($0, index($0, $2)) " }" > ("awkfile" $1 ".txt") }' patternfile.txt

这只是读取输入文件的每一行并将您感兴趣的部分(从第二个字段到行尾)写入输出文件。它使用输入的第一个字段来确定输出文件名。

【讨论】:

  • @BBungBBung:欢迎来到 StackOverflow。请务必接受和/或支持对您有帮助的答案。见meta.stackexchange.com/questions/5234/…。祝你好运。
  • 这个答案肯定很有帮助。但我仍然无法读取原始 awkfile 的其余部分,除了 BEGIN 部​​分。
  • 很遗憾,自从我写下我的答案以来,你完全改变了你的输入:/
  • 对不起,汤姆法兰西。为了澄清我的观点,我改变了。谢谢您的回答。我对你给 cmets 的东西有了更多的了解。
猜你喜欢
  • 2017-02-08
  • 2021-12-24
  • 2014-10-19
  • 1970-01-01
  • 2019-08-07
  • 2017-06-16
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多