Shell-Script
處理文本流部分,用 ␁ 分隔
如何將打開的文件流拆分
stdin
為較小的部分,每個部分都傳遞給腳本,我有一個
stdin
類似於…的大文件␁HeadingHere abcd abcd ␁Different Title bcde bcde {a lot longer} ␁Different again! cdef cdef
我正在尋求將這些部分中的每一個傳遞給
./script.sh
這將模擬做:
cat <<EOF | ./script.sh ␁HeadingHere abcd abcd EOF
cat <<EOF | ./script.sh ␁Different Title bcde bcde {a lot longer} EOF
cat <<EOF | ./script.sh ␁Different again! cdef cdef EOF
每個部分都可以通過
␁
分隔它們來確定。我想過使用
xargs
和做一些類似xargs -d '\01' -n1 echo
但遇到的事情xargs: argument line too long
理想情況下,腳本將是
posix
合規的
您可以將這些部分拆分為單獨的文件並逐個處理它們。這會產生
outfile.1
等:awk '/^␁/ { count++ } { print > "outfile." count } ' < file
或者,您可以將
awk
這些部分逐個傳遞給命令:awk 'BEGIN {command = "./script.sh"} /^␁/ { close(command) } { print | command } ' < file
我在上面使用了文字 U+2401 SYMBOL FOR START OF HEADING,因為這就是複制粘貼給我的。您
\01
在命令行中使用過,因此,如果您有這些,請在程式碼中也xargs
將 SOH 曲線更改為實際的 START OF HEADING 。\001``awk
我們也可以設置
RS
為 SOH,但這並不完全適合,因為這裡我們在記錄的開頭有 SOH,並awk
希望在結尾找到記錄分隔符。