我已經這樣桑達文件存儲在陣列
echo ${arr[@]}
1 13 19 30 34
陣列我想使用該陣列,以從其他文件的sed行(1,13,19,30和34)。我知道我可以使用循環,但我想知道是否有更直接的方法來做到這一點。到目前爲止,我還沒有做到。
感謝
我已經這樣桑達文件存儲在陣列
echo ${arr[@]}
1 13 19 30 34
陣列我想使用該陣列,以從其他文件的sed行(1,13,19,30和34)。我知道我可以使用循環,但我想知道是否有更直接的方法來做到這一點。到目前爲止,我還沒有做到。
感謝
sed的溶液:
a=(1 13 19 30 34)
sed -n "$(sed 's/[^[:space:]]*/&p;/g' <<< ${a[@]})" file
這將提取1,圖13,19,30和第34行從file
它似乎在做我想做的事。謝謝 – biorunner88
@ biorunner88,不客氣 – RomanPerekhrest
您可以使用AWK和系統功能運行sed命令
awk '{ for (i=1;i<=NF;i++) { system("sed -n \""$i"p\" filename") } }' <<< ${arr[@]}
這可以是開放的,雖然命令注入,因此相應地評估風險。
我不會冷靜地回答@SO,但是我會說,你的答案值得一個。 – Kent
我確實倒過來了。 shell調用awk來調用system()來調用shell來調用sed是瘋狂的。 –
可以執行單個在每一行的sed命令通過將命令和分號附加到每行,並將結果作爲sed程序運行。這可以使用變量和數組中的bash模式替換以緊湊的方式進行管理;例如,打印選定的線,使用p
命令(-n
抑制打印未被選擇的行):
sed -n "${arr[*]/%/p;}"
正常工作也與更復雜的命令等s/from/to/
:
sed "${arr[*]/%/s/from/to/;}"
這將執行只在選定的行上進行更換。
謝謝,它似乎也在工作。 – biorunner88
awk -v rows="${arr[*]}" 'BEGIN{split(rows,tmp); for (i in tmp) nrs[tmp[i]]} NR in nrs' file
請解釋您的解決方案。 –
它的哪部分不清楚? –
你會在「另一個文件」的行/行上做什麼? – Kent
只想根據數組索引將文件分成兩部分。數組數字是行。 – biorunner88
@ biorunner88,略有不同。數字'1 13 19 30 34'應該如何幫助分割文件?你可以發佈文件嗎? – RomanPerekhrest