4100行を含む大容量ファイルを分割しようとしています。 6行の数字をファイルで区切り、他の行は4行の数字をファイルに従う必要があります。次の点を考慮してください。
Bashスクリプトを書くには?
答え1
あなたは試すことができますawk
:
awk '{if (NR>6){if ((NR-6)%4==1){++c}} else {c=1}};{print >"file"c".las"}' infile
設定gnu
と比較的最新バージョンの使用split
サフィックスを追加できます。次のようにすることもできます。
{ printf %s\\n\\n; cat infile; } | split -d -l 4 --additional-suffix='.las' - file
( set ./*.las
sed '1d
s/\\/&&/g
2c\
1i\\
3s/$/\\/' "$1" | sed -f - -i "$2"
rm -f "$1" )
つまり、2つの空行を印刷してファイルを印刷し、結合された出力を4行に分割し、元の入力の最初の2行をsed
2番目の部分に挿入し(存在する場合はバックスラッシュをエスケープした後)、最後に最初の2行をエスケープします。部分を削除します。 。ただし、これを行うとブロック名がゼロパディングされるため、最終的には次のようなfile0001.las
結果が発生することに注意してください。
答え2
次のコマンドは、ファイルが4行目に分割されると仮定して説明されているように分割されます。出力ファイルの名前は、などoutput00
で指定されます。output01
その後、すべてのoutput*
ファイルの名前を変更し、.las
サフィックスを最後に固定し、必要に応じて前のゼロを削除できます。
split -l4 -d ./input_file output
答え3
csplit -s -k -f file. inoutfile '/^/+6' '/^/+4' '{*}'