AWK-仅打印副本

AWK-仅打印副本,awk,getline,Awk,Getline,我有一个文件: jeden dwa jeden trzy trzy cztery piec jeden 此命令打印出: $ awk 'BEGIN {while ((getline < "file") > 0) if(a[$0]++) print }' jeden trzy jeden 编辑: 我找到了一个有效的例子 awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } }

我有一个文件:

jeden
dwa
jeden
trzy
trzy
cztery
piec
jeden
此命令打印出:

$ awk 'BEGIN {while ((getline < "file") > 0) if(a[$0]++) print }'
jeden
trzy
jeden
编辑:

我找到了一个有效的例子

awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } } x[$1] = $0}' file

我也希望这样做,但是使用getline。

这可能适合您:

awk '{a[$1]++}END{for(x in a)if(a[x]>1)for(i=1;i<=a[x];i++)print x}' file

awk'{a[$1]+}END{for(a中的x)if(a[x]>1)for(i=1;i这可能适用于您:

awk '{a[$1]++}END{for(x in a)if(a[x]>1)for(i=1;i<=a[x];i++)print x}' file

awk'{a[$1]+}END{for(a中的x)如果(a[x]>1)for(i=1;i您需要将所有行存储在内存中,或者对文件进行第二次检查。第一次检查可能更容易,除非它是一个大文件,否则您可能有足够的内存。当然,您可以将其填充到一行中,但为了便于理解,这里将其作为一个文件

#!/usr/bin/awk -f

{ 
        lines[NR] = $0
        counts[$0]++ 
}             

END { 
        for(i = 0; i < length(lines); i++) {
                if(counts[lines[i]] > 1) {
                        print lines[i]
                }       
        }       
}

您需要将所有行存储在内存中,或者对文件进行第二次检查。第一次检查可能更容易,除非它是一个大文件,否则您可能有足够的内存。当然,您可以将其填充到一行中,但为了便于理解,这里将其作为一个文件

#!/usr/bin/awk -f

{ 
        lines[NR] = $0
        counts[$0]++ 
}             

END { 
        for(i = 0; i < length(lines); i++) {
                if(counts[lines[i]] > 1) {
                        print lines[i]
                }       
        }       
}
awk'BEGIN{while((getline<“file”)>0){a[$0]++;if(a[$0]==2)打印;if(a[$0]>=2)打印}
当计数为2时,它将打印该行。当计数大于或等于2时,它将打印该行。因此,对于第二次出现的情况,该行将打印两次以“赶上”。

awk'BEGIN{while((getline<“file”)>0{a[$0]+;if(a[$0]==2)print;if(a[$0]>=2)print}

当计数为2时,它将打印该行。当计数大于或等于2时,它将打印该行。因此,对于第二次出现的情况,该行将打印两次以“赶上”.

看起来他希望这些行按顺序排列。看起来他希望这些行按顺序排列。另一个:
排序文件| uniq-D
为什么要使用getline?@Kevin,因为我在脚本中需要它。另一个:
排序文件| uniq-D
为什么要使用getline?@Kevin,因为我在脚本中需要它。@Tedee12345:注意这一点可能会稍微影响排序。@Dennis Williamson您能举一个这个主题的例子吗?@Tedee12345:例如,如果您有a、b、b、a,b将在a之前打印。但是,这可能不是不希望的。@Dennis Williamson现在我明白了。谢谢您的澄清。@Tedee12345:请注意,这可能会稍微影响排序。@Dennis Williamson你能举个例子吗?@Tedee12345:如果你有a,b,b,a,例如,b会在a之前打印出来。但是这可能不是不可取的。@Dennis Williamson现在我明白了。谢谢你的澄清。
awk 'BEGIN {while ((getline < "file") > 0) { a[$0]++; if(a[$0] == 2) print; if (a[$0] >= 2) print }}'