を複製しますAWKの印刷にのみ、私はファイルを持っている
私は動作する例を見つけました。
awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } } x[$1] = $0}' file
私は同じことをしたいが、getlineを使用したい。
を複製しますAWKの印刷にのみ、私はファイルを持っている
私は動作する例を見つけました。
awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } } x[$1] = $0}' file
私は同じことをしたいが、getlineを使用したい。
awk 'BEGIN {while ((getline < "file") > 0) { a[$0]++; if(a[$0] == 2) print; if (a[$0] >= 2) print }}'
カウントは2である、それは行を出力します。カウントが2以上の場合、行を出力します。したがって、2回目の出現では、その行は「追いつく」ために2回印刷されます。
よい解決策。 ありがとうございます。 – Tedee12345
@ Tedee12345:注文にわずかに影響する可能性があることに注意してください。 –
@ Dennis Williamsonこのテーマの例を挙げることはできますか? – Tedee12345
これはあなたのために働くかもしれない:
awk '{a[$1]++}END{for(x in a)if(a[x]>1)for(i=1;i<=a[x];i++)print x}' file
彼は順番に行を望むように見えます。 – Kevin
私の編集内容をお読みください。 ご協力いただきありがとうございます – Tedee12345
あなたは、メモリ内のすべての行を保存したり、ファイルを介して第2のパスを取るかのいずれかが必要です。それはおそらく、最初のことを行う方が簡単でしょう。それが大量のファイルでない限り、おそらくそのメモリがあります。もちろんこれを1行にまとめることはできますが、ここでの理解を容易にするため、ファイルとして扱います。
#!/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 'a[$0]++' file
私の編集をお読みください。 あなたの助けをありがとう – Tedee12345
もう1つ: 'sort file |ユニーク-D' – kev
なぜgetlineを使いたいのですか? – Kevin
@ケビン私はスクリプトでそれが必要になるので。 – Tedee12345