N個の行を持つことができるデータファイルがあります。各行は、スペースで区切られたM個の要素で構成されています。現在、各行を複数のセグメントに分割したいと思います。つまり、セグメント数が3であると仮定すると、元のファイルは3つのファイルに分割され、各ファイルにはN行があり、各行にはM / 3要素があります。 C ++またはJavaプログラムを書くことに加えて、Unix / Linuxでこれを行うための効率的な方法はありますか?
ベストアンサー1
これは同じファイル内のさまざまな数のフィールドを満たし、最後のセグメントは部分的にのみ埋められます。つまり、指定されたより少ない数のフィールドがあります (セグメントごと)。
ただし、行のフィールド数によって指定された数より少ないセグメントが生成される場合、そのセグメントの出力ファイルには何も書き込まれません。
awk -v 'ncol=5' -v 'pfix=file' '{
fldn = 0
sfix = 1
segs = NF/ncol
# round up if number of field is not evenly divisible by number of columns
segs = (segs == int(segs)) ?segs :int(segs)+1
while (fldn != NF) {
fmod = (++fldn) % ncol
printf "%s%s", dlim, $(fldn) >> pfix sfix
if (fmod == 1 ) { dlim = " " }
if ((fmod==0 ) || (fldn==NF)) {
printf "\n" >> pfix sfix
dlim = ""; sfix++
}
}
}' infile