1行に45000文字を含むファイルがあり、行内の特定の文字数に基づいて元のファイルを分割したいと思います。小さな例として、入力ファイルは次のようになります。
入力.txt:
123394531112334455938383726644600000111234499922281133
234442221117273747474747474729292921111098887777772235
231112233647474838389292121037549284753930837475111013
各行には54桁の数字があります。最初の10桁は別々のファイルで、11~24桁は別のファイルにしたいと思います。ビット25〜32は別のファイルであり、ビット33〜50は最後のファイルです。例:
out1.txt(1-10)
1233945311
2344422211
2311122336
out2.txt(11-24)
12334455938383
17273747474747
47474838389292
out3.txt(25-32)
72664460
47472929
12103754
out4.txt(33-54)
0000111234499922281133
2921111098887777772235
9284753930837475111013
どんな提案がありますか?
ベストアンサー1
cut
複数回呼び出すことができます。
cut -c 1-10 < file > out1.txt
cut -c 11-24 < file > out2.txt
cut -c 25-32 < file > out3.txt
cut -c 33-54 < file > out4.txt
(現在のバージョンのGNUはcut
マルチバイト文字をサポートしていません(入力のASCII 10進数には問題ありません)。
またはawk
ため息で:
awk '{
print substr($0, 1, 10) > "out1.txt"
print substr($0, 11, 14) > "out2.txt"
print substr($0, 25, 8 ) > "out3.txt"
print substr($0, 33, 22) > "out4.txt"}' < file
awk
(現在のバージョンの一部の実装はmawk
マルチバイト文字をサポートしていません(ASCII 10進数では問題ありません)。)
GNUを使用すると、awk
次のこともできます。
awk -v FIELDWIDTHS='10 14 8 22' '
{for (i = 1; i <= NF; i++) print $i > "out" i ".txt"}' < file