ビッグデータのためにテキストファイルを分割して名前を付ける方法(コンテンツ行数に基づいて)は何ですか?

ビッグデータのためにテキストファイルを分割して名前を付ける方法(コンテンツ行数に基づいて)は何ですか?

Linuxシステムには1000個のテキストファイルがあり、各テキストファイルの名前にはプレフィックス(OG00*)があり、9個の一意のIDが含まれています。テキストファイル名で各IDのテキストファイルを作成したいと思います。OG0012637_1.txt, OG0012637_2.txt, OG0012637_3.txt, OG0012637_4.txt, OG0012637_5.txt....OG0012637_9.txt

Input:
$ cat OG0012637.txt
        TRINITY_DN9932_c0_g2_i1.p1
        TRINITY_DN17663_c0_g1_i1.p1
        TRINITY_DN6645_c0_g1_i2.p1
        TRINITY_DN2462_c0_g1_i2.p1
        TRINITY_DN19713_c3_g1_i2.p1
        TRINITY_DN4587_c0_g1_i1.p1
        TRINITY_DN4405_c0_g1_i1.p1
        TRINITY_DN7191_c1_g2_i1.p1
        TRINITY_DN1740_c0_g1_i2.p1

必須出力ファイル:

$ cat OG0012637_1.txt
 TRINITY_DN9932_c0_g2_i1.p1
$ cat OG0012637_2.txt
 TRINITY_DN17663_c0_g1_i1.p1
$ cat OG0012637_3.txt
 TRINITY_DN6645_c0_g1_i2.p1
$ cat OG0012637_4.txt
 TRINITY_DN2462_c0_g1_i2.p1
$ cat OG0012637_5.txt
 TRINITY_DN19713_c3_g1_i2.p1
$ cat OG0012637_6.txt
 TRINITY_DN4587_c0_g1_i1.p1
$ cat OG0012637_7.txt
 TRINITY_DN4405_c0_g1_i1.p1
$ cat OG0012637_8.txt
 TRINITY_DN7191_c1_g2_i1.p1
$ cat OG0012637_9.txt
 TRINITY_DN1740_c0_g1_i2.p1

ベストアンサー1

これらの作業用に作成されたツール/ユーティリティは次のとおりです。分ける。このGNUバージョンにはユースケースに適したオプションがあります。

for f in OG00*.txt; do
split -l1 -a1 -e --additional-suffix=.txt  --numeric-suffixes=1  "$f" "${f%????}_" 
done

出力

.
├── OG0012637_1.txt
├── OG0012637_2.txt
├── OG0012637_3.txt
├── OG0012637_4.txt
├── OG0012637_5.txt
├── OG0012637_6.txt
├── OG0012637_7.txt
├── OG0012637_8.txt
├── OG0012637_9.txt
└── OG0012637.txt
  • -l1ファイルは1行に1つずつ分割する必要があります。
  • -a1処理する生成ファイルは9つしかないため、数字の長さは1桁にしてください。
  • --numeric-suffixes出力ファイルの番号は、デフォルト値0ではなく1から始まる必要があります。
  • --additional-suffixデフォルトでは、何も追加せずに.txtを出力ファイルに追加する必要があります。
  • 接頭辞は、デフォルトの xa ではなく、下線付きのベース名です。

おすすめ記事