Bash
使用 shell 腳本根據行內文本將 .txt 文件拆分為 3 個文件
我有一個要求,我從某個工具的輸出中獲取一個 .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 位數字/字母數字值,中間的文本用作將文件拆分為多個文件的標識符。
我正在尋找使用
awk
或sed
命令來執行此操作。
如果這不是您所需要的全部:
$ 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 “^$”) 如果有的話。