0

数値の単一列を持つファイルがあります:

12
15
24
220

そして、多くのフィールドを持つ 2 番目のファイルがあります。私は非常に簡単なことをしようとしています:最初のファイルにリストされている番号を持つすべての行(行12、15など)の大きなファイルの最初の列を出力します。

私はワンライナーを思いついた:

awk 'FNR==NR{array[NR]=$1;next}(NR in array){print $1}' lines.txt input.txt  > output.txt

しかし、それは私に空の出力ファイルを与え、私には理由がわかりません.これについての助けを気にしないでください. 期待どおりに機能しないのは「配列内のNR」だと思います。

4

2 に答える 2

1

NR全体の入力行番号です。2 番目のファイルでNRは、最初のファイルに 1 を加えた最後の行番号から開始し、そこから増加します。2 番目の条件は決して一致しません。

代わりに、次のようなものを探していると思います。

awk 'FNR==NR{array[$1]=1;next}
    (FNR in array){print $1}' lines.txt input.txt  > output.txt

明らかにFNR、現在のファイル内の行番号です。

また、最初のファイルの行番号ではなく、最初のファイルから配列に番号を読み取っていることにも注意してください。

于 2013-10-01T15:54:15.530 に答える