大容量ファイルの一部を複数の出力ファイルにコピーする

大容量ファイルの一部を複数の出力ファイルにコピーする

次のような大きなファイルがあります。

Header1

Subheader1

l1 

l1'

l1''

Header2

Subheader2

l2 

l2'

l2''

Headern

Subheader n

ln

ln'

ln''

(ここでnは約25K)

l1-l1'', l2-l2'' ... ln-ln''たとえば、file1, file2, ... file nファイルの特定の行番号に貼り付ける必要があります。

ベストアンサー1

ヘッダーと行の関係を指定していません。ただし、関係が一定の行数の場合は、grepを使用して行番号を取得し、sedを使用して行を抽出できます。

たとえば、Subheaderの後ろのすべての行を取得するには、次の手順を実行します。

#!/bin/bash 

file_in=/tmp/test.txt
file_out=/tmp/file1.txt
LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for line in $LINES; do
  echo $line
  line1=$(($line+1))
  sed -n ${line1}p $file_in >> $file_out
done

編集:上記のスクリプトをループで実行できます。

#!/bin/bash

n_max=100
file_in=/tmp/test.txt
file_out=/tmp/file

LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for n in `seq 1 $n_max`; do
  echo "line $n"
  for line in $LINES; do
    line_n=$(($line+$n))
    sed -n ${line_n}p $file_in >> $file_out$n.txt
  done
done
exit 0

おすすめ記事