Awk 删除图案后的所有连续重复线
我有一个包含数据的文件Awk 删除图案后的所有连续重复线,awk,sed,Awk,Sed,我有一个包含数据的文件 cell (HB) input input input Z output A input cell (BP) input input Z1 output A1 input 我希望输出为 cell (HB) Z output A input cell (BP) Z1 output A1 input 我想删除单元格行之后出现word输入的所有连续行 我试过密码 awk '{for (i=1;i<=NF;i++) if (!a[$i]++) print($i,FS)}
cell (HB)
input
input
input
Z
output
A
input
cell (BP)
input
input
Z1
output
A1
input
我希望输出为
cell (HB)
Z
output
A
input
cell (BP)
Z1
output
A1
input
我想删除单元格
行之后出现word输入
的所有连续行
我试过密码
awk '{for (i=1;i<=NF;i++) if (!a[$i]++) print($i,FS)}{print("\n")}' file
awk'{for(i=1;i仅针对您展示的样本,请尝试以下内容。使用GNUawk编写并测试
awk '
!/input/{
if(count==1){
print prev
}
count=0
prev=""
}
/input/{
count++
prev=$0
next
}
1
END{
if(count==1){
print prev
}
}
' Input_file
使用gnu awk
您可以使用RS
和RT
:
awk-vrs='cell[^\n]*\n(输入\n)+''{sub(/\n.+/,“\n”,RT);ORS=RT}1'文件
细胞(血红蛋白)
Z
输出
A.
输入
单元格(BP)
Z1
输出
A1
输入
在这里:
-v RS='cell[^\n]*\n(input\n)+
将RS
设置为cell
,后跟空格,后跟任何内容,直到换行,然后是多行,其中包含文本input
sub(…)
:删除第一行换行后的所有内容
ORS=RT
:将输出记录分隔符设置为与RT
1
:使用OR打印每条记录
比预期的短,我想知道它是否有问题:
$ awk '!(f&&/input/){print;f=0}/cell/{f=1}' file
输出:
cell (HB)
Z
output
A
input
cell (BP)
Z1
output
A1
input
这可能适用于您(GNU-sed):
通过设置-E
打开扩展regexp
打开一个两行窗口
如果该行包含单元格
,然后下一行包含输入
,请删除最后一行并重复
否则,打印/删除第一行并重复
此通用解决方案将删除所有重复的行
sed -E 'N;/^(.*)\n\1$/{:a;s/\n.*//;$!{N;/^(.*)\n\1$/ba};D};P;D' file
通过设置-E
打开扩展regexp
打开一个两行窗口
如果窗口中的行重复,请删除最后一行并继续执行此操作,直到两行不同,然后删除第一行
否则,请打印/删除第一行并重复。在单元格行之后显示word input
您显示的示例仅显示单元格字符串,我们可以在其中设置/取消设置变量,是否还有其他内容出现在单元格字符串的位置?为什么我要问这个问题,我们可以从哪里开始查找连续性ve输入的出现情况以及忽略哪个块,请告知,谢谢。否。数据仅存在单元格
,我们需要删除所有重复输入的行cell@NEHACHOUDHARY,好的,那么你可以试一下我的答案,并在评论部分告诉我进展如何,等等,干杯并继续问好estions,继续在这个伟大的网站上分享好的知识,干杯。
sed -E 'N;/^(.*)\n\1$/{:a;s/\n.*//;$!{N;/^(.*)\n\1$/ba};D};P;D' file