可以說這文本設置的由分裂規則「或」線
的端我需要把設定線(規則)的成段(bash的陣列成員),但我必須爲每個陣列構件,其是1024
所以每個陣列成員應包含設置規則的字符限制爲每個陣列成員秒,但字符數不能超過1024個
假設規則文本等 A或B或C或d或E或F或G或H
輸出應該是 陣列構件1 = A或b
陣列構件2 = C或d或e
陣列構件3 = F或G型
陣列構件4 = H
任何人可以幫助我做到這一點的工作在Solaris 10服務器
可以說這文本設置的由分裂規則「或」線
的端我需要把設定線(規則)的成段(bash的陣列成員),但我必須爲每個陣列構件,其是1024
所以每個陣列成員應包含設置規則的字符限制爲每個陣列成員秒,但字符數不能超過1024個
假設規則文本等 A或B或C或d或E或F或G或H
輸出應該是 陣列構件1 = A或b
陣列構件2 = C或d或e
陣列構件3 = F或G型
陣列構件4 = H
任何人可以幫助我做到這一點的工作在Solaris 10服務器
這並不完全是微不足道的,並且需要更多的澄清,但基本上你用OR最初將它們分割/ AND(和可能其他一些圖案,取決於您的需要),然後遞歸地再次分割那些大於1024的塊。
PS這似乎是其中一種情況,當使用完全成熟的腳本語言(如Perl,Python,PHP或任何其他語言)可以更加方便地實現結果時。
例如,在PHP(不知道是否完全正確的,已經有一段時間沒有做PHP),一個基本的事情可能是這樣的:
function splitByOr($input)
{
$tokens = explode(" OR ",$input);
foreach ($t in $tokens)
if (strlen($t) > 1024)
$t=splitByOr($t);
return $tokens;
}
在samplerule文件中的個體,沒有規則的長度超過148個字符 - 遠少於1024個字符的限制。如果這些規則超過了這個限制,你就不會說如何處理這些規則。
這是一個非常簡單的Bash腳本,它會將您的樣本分割爲文字「\ n」並將其分配到稱爲「規則」的數組中。它會跳過超過1024個字符的線條和打印錯誤消息:
#!/bin/bash
while read -r line
do
((count++))
if ((${#line} > 1024))
then
echo "Line length limit of 1024 characters exceeded: Length: ${#line} Line no.: $count"
echo "$line"
continue
fi
rules+=($line)
done < <(echo -e "$(<samplerule)")
這種變化將截斷線的長度,而不考慮後果:
#!/bin/bash
while read -r line
do
rules+=(${line:0:1024})
done < <(echo -e "$(<samplerule)")
如果文字「\ n」是不實際在該文件中,你需要使用猛砸陣列,而不是完全AWK編碼本,改變任一版本高於行這樣說:
done < <(echo -e "$(<samplerule)")
這樣說:
done < <(awk 'BEGIN {RS="OR"} {print $0,"OR"}' samplerule)
if [[ "${rules[${#rules[@]}-1]}" == "OR" ]]
then
unset "rules[${#rules[@]}-1]"
fi
它將分割「OR」上的行。
編輯:添加了一條命令,在最後刪除一個額外的「OR」。
這實際上並不是我要找的:( – soField 2010-05-07 09:55:19