Awk 删除第2列中的重复出现

Awk 删除第2列中的重复出现,awk,Awk,我有下面的输入文件,其中有两个字段由tab分隔。我希望解释得足够好 说明 字段2包含章节。在这种情况下,有2个,国家历史和自然地理 所有章节都与字段1中的值10相关 每章下面的章节都与value07相关 内容与值05 当$1==10和$2与前一章不同时,下一章开始。 在这种情况下,第1章从第1行转到第16行 在这种情况下,第2章从第17行开始到文件末尾 章节、章节和内容可以在字段2中重复出现 例如: 10 HISTORY OF THE COUNTRY 07 FIRST PART

我有下面的输入文件,其中有两个字段由tab分隔。我希望解释得足够好

说明

  • 字段2包含章节。在这种情况下,有2个,
    国家历史
    自然地理
  • 所有章节都与字段1中的值
    10
    相关
  • 每章下面的章节都与value
    07
    相关
  • 内容与值
    05
  • 当$1==10和$2与前一章不同时,下一章开始。
    • 在这种情况下,第1章从第1行转到第16行
    • 在这种情况下,第2章从第17行开始到文件末尾
  • 章节、章节和内容可以在字段2中重复出现
例如:

10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   2    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  REVIEW          
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  Second   Section
10  HISTORY OF THE COUNTRY
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
05  Article   2    
07  SECOND   PART   
07  REVIEW          
05  Article   1    
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
05  Second   Section
该国历史在1号线和16号线之间出现了4次

自然地理在第17行和文件末尾之间出现2次

我的目标是:

10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   2    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  REVIEW          
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  Second   Section
10  HISTORY OF THE COUNTRY
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
05  Article   2    
07  SECOND   PART   
07  REVIEW          
05  Article   1    
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
05  Second   Section
删除重复出现的
章节
章节
,所有章节保持相同的出现顺序。对于内容,不要删除任何内容。我是说

  • 对于第1章,删除该国家重复的
    历史记录
    第1章的上下文(第1行和第16行之间)
  • 对于第2章,删除第2章上下文中重复的
    自然地理
    第17行和第25行)
输入如下:

10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   2    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  REVIEW          
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  Second   Section
10  HISTORY OF THE COUNTRY
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
05  Article   2    
07  SECOND   PART   
07  REVIEW          
05  Article   1    
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
05  Second   Section
输出如下:

10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  FIRST   PART    
07  INTRODUCTION    
05  Article   2    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  REVIEW          
05  Article   1    
10  HISTORY OF THE COUNTRY 
07  SECOND   PART   
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  Second   Section
10  HISTORY OF THE COUNTRY
07  FIRST   PART    
07  INTRODUCTION    
05  Article   1    
05  Article   2    
07  SECOND   PART   
07  REVIEW          
05  Article   1    
07  METHODOLOGY     
05  Article1       
10  PHYSICAL GEOGRAPHY
07  FIRST   PART    
07  INTRODUCTION    
05  First   section 
05  Second   Section
我当前的代码打印出一些接近的东西,但不是我要找的东西

awk '$2 in a {next} {
    a[$2]++
}1' input.txt

10  HISTORY OF THE COUNTRY
07  FIRST   PART
07  INTRODUCTION
05  Article   1
07  SECOND   PART
07  REVIEW
07  METHODOLOGY
05  Article1
10  PHYSICAL GEOGRAPHY
05  First   section
05  Second   Section
为了便于理解,我在下面以黄色和橙色显示输入,以绿色显示部分。除此之外,我还显示了电流输出和期望输出。谢谢你的帮助


您可以使用此
awk

awk -F '\t' '$1 == 10 { ch = $2; sec = "" } $1+0 == 7 { sec = $2 }
             ($1+0 == 5 && !seen[ch,sec,$0]++) || !seen[ch,$0]++' file


另一个
awk

您需要以路径相关的方式应用唯一性。打印所有独特的章节、章节中的零件以及零件中的文章/章节

$ awk '$1=="10" && !h1[c=$0]++; 
       $1=="07" && !h2[c,s=$0]++; 
       $1=="05" && !h3[c,s,$0]++' file

10  HISTORY OF THE COUNTRY
07  FIRST   PART
07  INTRODUCTION
05  Article   1
05  Article   2
07  SECOND   PART
07  REVIEW
05  Article   1
07  METHODOLOGY
05  Article1
10  PHYSICAL GEOGRAPHY
07  FIRST   PART
07  INTRODUCTION
05  First   section
05  Second   Section
{print$0}
在缺少语句时被暗示

awk
关联数组
a[k]
(类似于哈希映射)中,使用键k,初始值等于
0
或空值(布尔值为false),后递增
a[k]+
并取反
![k]+
。因此,它只适用于第一个
k
,因此可以用作唯一的过滤器。在这里,
h1、h2和h3
对应于每个级别的唯一头,其中键也包括父路径,将仅基于键打印唯一值


此脚本可以因此问题而缩短,但如果需要添加另一层,则很容易修改。

欢迎使用堆栈溢出。这也是一个面向专业和热情程序员的问答页面。在问题中添加您自己的代码。你至少要展示你自己为解决这个问题所做的大量研究。非常感谢你的帮助。这部分内容是什么
!h3[c,s,$0]+
?即使你的脚本中没有print命令,结果如何打印?非常感谢你的帮助。试着理解你的逻辑。为什么使用
$1+0
?这是将
07
字符串转换为数字
7
。另一种选择是写
$1==“07”
,这比原来多了一个字符。@karakfa谢谢你关于$1+0的回答。如何在解决方案中插入打印语句,以显示awk读取每行后的情况?。为了更好地了解发生了什么,以及像这样的数组做了什么
!h3[c,s,$0]++
你可以这样打印:
($1+0==5&&!见[ch,sec,$0]++)| |!看到[ch,$0]+{print[ch,sec,$0],[ch,$0]}
我得到了错误,但现在它工作了。非常感谢你的帮助