Awk 除了第一个匹配的图案之外
我知道如何在awk、gred、sed中转投,但除了第一场比赛外,我不知道如何转投。我在doc中搜索了,但找不到正确的命令。 我有这样一个简单的文件: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
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
这是awk对打印行的神秘速记1
$ 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应该使用数组对其进行排序,最小化相似的模式并对其进行计数。但问题是我需要很多用户,如果我使用数组并计算它,最小化并计算整个文件。哦,天哪,你救了我的命。非常感谢约翰。我几乎是今天早上才找到答案的。