Bash:行番号による行のフィルタリング

Bash:行番号による行のフィルタリング

行と列の多い区切りファイル()がある場合data.txt

346 dfd asw  34
565 sd  wdew 34
667 ffg wew  23
473 sa  as   21
533 jhf qwe  54

抽出したい行番号を含む他のファイル(positions.txt

3
5
8

positions.txtこのファイルを使用してその場所を抽出するにはどうすればよいですかdata.txt?以下は私が期待する結果の例です。

667 ffg wew  23
533 jhf qwe  54

ベストアンサー1

簡単にawk:

awk 'NR==FNR{ pos[$1]; next }FNR in pos' positions.txt data.txt
  • NR==FNR{ ... }- 最初の入力ファイル(例positions.txt:)を処理します。
    • pos[$1]- 累積位置(レコード数)を配列キーにpos設定
    • next- 次のレコードに移動
  • FNR in pos- 2番目の入力ファイルを処理するときdata.txtFNR現在の入力ファイルから読み取られたレコード数を示す)、現在のレコード番号が位置FNR配列にある場合にのみレコードを印刷するpos(キーで検索)

出力例:

667 ffg wew  23
533 jhf qwe  54
...

おすすめ記事