我是 shell 腳本的新手。如果它與另一個字串匹配,我正在嘗試從字串中選擇所有欄位值。例如我有一個字串
Mobile:25:15000#TV:10:20000#Laptop:20:65000
如果另一個字串是,TV那么我的代碼應該從 TV:10:20000同一個字串中選擇資料,Mobile那么它應該選擇Mobile:25:15000。
到目前為止我寫的代碼如下:
#!/bin/bash
x="Mobile:25:15000#TV:10:20000#Laptop:20:65000"
y="Laptop"
o_str=$(echo "$x"| awk -F "#" 'BEGIN{OFS="\n"} {if ($1== $y) print } y=$y');
echo $o_str
我知道我做錯了什么,但無法弄清楚。有人可以告訴我我哪里出錯了嗎?
uj5u.com熱心網友回復:
您可以使用
o_str=$(awk -v y="$y" -F: 'BEGIN{RS="#"} $1 == y' <<< "$x");
查看在線演示:
#!/bin/bash
x="Mobile:25:15000#TV:10:20000#Laptop:20:65000"
y="Laptop"
o_str=$(awk -v y="$y" -F: 'BEGIN{RS="#"} $1 == y' <<< "$x");
echo "$o_str"
## => Laptop:20:65000
詳情:
-v y="$y"- 將 tjey變數傳遞給awk腳本-F:- 欄位分隔符設定為:字符BEGIN{RS="#"}- 記錄分隔符設定為#字符$1 == y- 如果欄位 1 值等于y變數值,則列印此記錄。
uj5u.com熱心網友回復:
bash解決方案怎么樣:
#!/bin/bash
x="Mobile:25:15000#TV:10:20000#Laptop:20:65000"
y="Laptop"
IFS=# read -r -a ary <<< "$x" # split $x on "#" into array "ary"
for i in "${ary[@]}"; do # loop over the elements of ary
if [[ $i = $y* ]]; then # if $y starts with an element
echo "$i" # then print the element
fi
done
輸出:
Laptop:20:65000
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。簡單的解釋是,創建一個awk名為的變數var,其中包含 bash 變數y的值。match在使用其中包含正則運算式的主程式var":[^:]*:[^#]*中,匹配的變數值將查找直到#找到 2 個冒號值,然后列印匹配的值。
y="Laptop"
o_str=$(awk -v var="$y" 'match($0,var":[^:]*:[^#]*"){print substr($0,RSTART,RLENGTH)}' Input_file)
當我們列印變數輸出時會如下:
echo "$o_str"
Laptop:20:65000
uj5u.com熱心網友回復:
Block-level HTML elements have a few restrictions:
它們必須用空行與周圍的文本隔開。最外面的塊元素的開始和結束標簽不能縮進。Markdown 不能在 HTML 塊中使用。
最好的問候 Tech2toward
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441511.html
