awk:从长行删除短行

时间:2014-04-02 14:16:07

标签: awk

我有一个很长的文本字符串文件,按长度排序。我需要做的是找到长行中包含的任何短行,将长行分成两条较短的行,并保留原始的短行,如下所示:

input:
here is an example of a long line
an example of

output:
here is
a long line
an example of

1 个答案:

答案 0 :(得分:1)

您尚未发布足够的数据集以允许我们发布完整的解决方案,但这里有一些可以帮助您入门:

$ awk '
NR==FNR{
  a[$0]++;
  next
}
{
  for(x in a) 
    if(x!=$0 && index($0,x)>0) {
      sub(x FS,"\n")
    }
}1' file file
here is 
a long line
an example of
  • 我们正在对文件进行两次传递。在第一遍中,读取行并将它们作为键存储在数组中(重复的行将作为一个键存储)。
  • 在第二遍中,我们遍历数组,如果键不等于当前行但是是当前行的子集,则用换行符替换该较小的单词。