ファイルa.txt
には以下が含まれます。
1 one
2 two
3 three
4 four
5 five
6 six
split -2 a.txt output_
その後、コマンド:出力で3つの新しいファイルを作成するoutput_aa
output_ab
output_ac
次のように入力するとcat output_aa
メッセージが表示されますno such file or directory
。
しかし、output_aa
geditで見ることができます。
なぜ?
ベストアンサー1
man split
部分的には次のように言います。
固定サイズ INPUT を PREFIXaa, PREFIXab, ... に出力します。
PREFIX
最後のコマンドライン引数はどこにあります(output_
あなたの場合)。したがって、出力ファイルの名前はoutput_aa
、、output_ab
およびでoutput_ac
それぞれ2行ずつ3つの部分に分けられます。
これも私が見た行動です。
だから読めない理由は、output_a
自分で作らなければ存在しないからです。
単一文字プレフィックスのみを使用してファイル名を指定する場合すでに分割を実行している場合は、名前を変更できます。 bashを仮定すると、これを使用できます変数の再構築機能サフィックスの最初の文字を削除します。これは重複を引き起こす可能性があります(これは特別なケースではありませんが、一般的なケースかもしれません)。
for f in output*; do echo mv "${f}" "${f%a?}${f##output_?}"; done
ターゲット名式の最初の部分はファイル名の末尾a?
(文字)から削除され、2番目の?
部分のみが最初output_?
(やはりランダム文字)から削除され、残りは追加されます。?
結果は、サフィックスの最初の文字を削除することです。
あなたの要件が満たされている場合は削除してくださいecho
。
再実行を承諾できる場合split
、GNU coreutils(8.5以降)には、サフィックスの長さを指定するsplit
オプションがあります。--suffix-length
適切な値を使用して、コマンドラインに以下を追加するだけです。
split -2 --suffix-length=1 a.txt output_
これは期待どおりにoutput_a
、output_b
およびを提供します。output_c
ありがとう@don_crisstiこれを指摘してください。