用于过滤文件内容的Bash脚本

时间:2016-02-23 23:39:18

标签: bash awk

我有一个看起来像的文件:

Location1 Person1 []
Location1 Person1 [place1, place2]
Location2 Person1 [place1]

我希望输出为:

 Location1 Person1 [place1, place2]
 Location2 Person1 [place1]

意味着我想告诉awk(或任何其他工具),对于唯一键位置和Person,如果有2个entires,则选择括号内的条目。

目前我正在这样做,但它没有帮助

awk '!seen[$1$2]++' $FileName > temp.txt

3 个答案:

答案 0 :(得分:2)

这可能是你想要的:

unsigned char res = -1.F *(Kernel[i-1]) + (Kernel[i+1]); 

这取决于您的要求和尚未与我们分享的输入样本。

答案 1 :(得分:2)

放轻松,你不需要awk

sort -r file | sort -t" " -k1,2 -u

给你:

Location1 Person1 [place1, place2]
Location2 Person1 [place1]

我的假设是,您不能在同一位置为同一个人的括号内设置多个值。

说明:

  • -r:reverse
  • -t:列分隔符
  • -k:关键字段
  • -u:unique

使用唯一开关排序始终保留重复行的第一个实例。如果你想保留最后一个实例(这里是排序顺序较低的行,包括括号内的值),你必须按相反顺序对数据进行排序,然后再将它们输入到你的唯一排序中。

答案 2 :(得分:0)

替代awk为每个唯一键打印最大数量的值

$ awk '{k=$1 FS $2} (k in v){n=split($0,t,",")}
           !(k in v)||n>c[k]{c[k]=n; v[k]=$0}
                         END{for(k in v) print v[k]}' file

Location1 Person1 [place1, place2]
Location2 Person1 [place1]

如果出现平局,则会打印第一行(最后一行更改n>c[k]n>=c[k]

相关问题