Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 除了第一个匹配的图案之外_Awk_Sed_Grep - Fatal编程技术网

Awk 除了第一个匹配的图案之外

Awk 除了第一个匹配的图案之外,awk,sed,grep,Awk,Sed,Grep,我知道如何在awk、gred、sed中转投,但除了第一场比赛外,我不知道如何转投。我在doc中搜索了,但找不到正确的命令。 我有这样一个简单的文件: tongtha AL_Vcs abcdef tongtha AL_Vcs abcdef tongtha AL_Vcs abcdef tuanngu AL_Ptime HEO tuanngu AL_Ptime HEO vuau AL_Ptime E2x vuau AL_verdi_b E2x vuau AL_TShell EU2HL tongt

我知道如何在awk、gred、sed中转投,但除了第一场比赛外,我不知道如何转投。我在doc中搜索了,但找不到正确的命令。 我有这样一个简单的文件:

tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef

tuanngu AL_Ptime HEO
tuanngu AL_Ptime HEO

vuau AL_Ptime E2x
vuau AL_verdi_b E2x
vuau AL_TShell EU2HL
tongtha AL_Vcs abcdef
               abcdef
               abcdef

tuanngu AL_Ptime HEO
                 HEO

vuau AL_Ptime E2x
     AL_verdi_b E2x
     AL_TShell EU2HL
这就是我的愿望

tongtha AL_Vcs abcdef
        AL_Vcs abcdef
        AL_Vcs abcdef

tuanngu AL_Ptime HEO
        AL_Ptime HEO

vuau AL_Ptime E2x
     AL_verdi_b E2x
     AL_TShell EU2HL
如果我能把它分为2美元,而不仅仅是1美元,那就更好了

tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef

tuanngu AL_Ptime HEO
tuanngu AL_Ptime HEO

vuau AL_Ptime E2x
vuau AL_verdi_b E2x
vuau AL_TShell EU2HL
tongtha AL_Vcs abcdef
               abcdef
               abcdef

tuanngu AL_Ptime HEO
                 HEO

vuau AL_Ptime E2x
     AL_verdi_b E2x
     AL_TShell EU2HL
将第一列替换为空格,但不替换第一个匹配项上的空格 工作原理
  • save=$1

    这将保存变量
    save
    中第一列的值

  • $1==last{gsub(/。/,“”,$1)}

    如果第一列与变量
    last
    相同,那么我们用相同数量的空格替换第一列

  • last=保存

    这将使用第一列在任何替换之前的值更新变量
    last

  • 1

    这是awk对打印行的神秘速记

替换前两列,但不替换第一个匹配的列 要对前两列执行相同操作,请执行以下操作:

$ awk '{save=$1} $1==last{gsub(/./," ",$1); gsub(/./," ",$2)} {last=save} 1' file
tongtha AL_Vcs abcdef
               abcdef
               abcdef

tuanngu AL_Ptime HEO
                 HEO

vuau AL_Ptime E2x
                E2x
               EU2HL
这可能适用于您(GNU-sed):


sed脚本一次打印一组行。该脚本首先测试重复的第一个和第二个字段,然后使用通用解决方案将这些字段替换为空格。如果第一次测试失败,则脚本将尝试仅匹配第一个字段,如果成功,则使用与上述相同的解决方案。

在第二个示例中,-$2的子字段用于前两段,而不是第三段。那是打字错误吗?我想保留3美元,否则我以后再数一数。我指的是第二种情况,在这种情况下,您想用2美元代替
。在前两节中,
$2
已被删除。在第三节,它被保留。特别是,
AL_verdi_b
AL_TShell
都是
$2
,它们都是保留的。我认为$2和$3应该使用数组对其进行排序,最小化相似的模式并对其进行计数。但问题是我需要很多用户,如果我使用数组并计算它,最小化并计算整个文件。哦,天哪,你救了我的命。非常感谢约翰。我几乎是今天早上才找到答案的。