Shell-Script

處理文本流部分,用 ␁ 分隔

  • June 3, 2018

如何將打開的文件流拆分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希望在結尾找到記錄分隔符。

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