Bash

使用 shell 腳本根據行內文本將 .txt 文件拆分為 3 個文件

  • March 2, 2022

我有一個要求,我從某個工具的輸出中獲取一個 .txt 文件,我想將它分成三個。

文件中的範例文本:

First line
Second line
23456
45677
45678

Third line
90909
90678

Last line
Z567Z
6787T

預期產出:

-> 文件 1.txt

23456
45677
45678

-> 文件 2.txt

90909
90678

-> 文件 3.txt

Z567Z
5677T

基本上,文件將具有我們想要使用的 5 位數字/字母數字值,中間的文本用作將文件拆分為多個文件的標識符。

我正在尋找使用awksed命令來執行此操作。

如果這不是您所需要的全部:

$ awk '
   /^[[:alnum:]]{5}$/ {
       if ( !inBlock++ ) {
           close(out)
           out = "file" (++cnt) ".txt"
       }
       print > out
       next
   }
   { inBlock = 0 }
' file
$ head file?.txt
==> file1.txt <==
23456
45677
45678

==> file2.txt <==
90909
90678

==> file3.txt <==
Z567Z
6787T

然後編輯您的問題以提供更清晰的要求和更具代表性的範例輸入/輸出。

這是醜陋的一個班輪:

grep -v '[:alpha:]' test.txt | sed "s/^$/==/g" | split -p "=="

注意:這將根據“==”模式生成 3 個或更多文件 (xa*)。

您可以進一步使用 for 循環刪除 “==” (sed ’s/=//g’ xa* | grep -v “^$”) 如果有的話。

引用自:https://unix.stackexchange.com/questions/691199