Bash, 30 bytes
Since saeednsaeedn won't act on my suggestion – which is both shorter and faster than his approach – I thought I'd post my own answer:
seq 1e6|factor|awk '$0=$2*!$3'
How it works
seq 1e6
lists all positive integers up to 1,000,000.
factor
factors them one by one. For the first ten, the output is the following:
1:
2: 2
3: 3
4: 2 2
5: 5
6: 2 3
7: 7
8: 2 2 2
9: 3 3
10: 2 5
Finally,
awk '$0=$2*!$3'
changes the entire line ($0
) to the product of the second field (the first prime factor) and the logical negation of the third field (1
if the is one prime factor or less, 0
otherwise).
This replaces lines corresponding to prime numbers with the number itself and all other lines with zeros. Since awk only prints truthy values, only prime number will get printed.