[英]What is the most compact or efficient way of doing several subsitutions in a file in bash
我有一個文件data.base,看起來像:
1234 XXXX
4321 XXXX
9884 ZZZZ
5454 YYYY
4311 YYYY
9882 ZZZZ
9976 ZZZZ
(...這樣的隨機出現直到10000行)
我想創建一個名為data.case的文件,該文件從data.base派生,只是用XXXX,YYYY,ZZZZ替換浮點數。
我不知道在bash或朋友上做這件事的最緊湊/最有效/最快捷的方法是什么。
我通常要做的是:
sed -e "s/XXXX/1.34555/g" data.base > temp1
sed -e "s/YYYY/2.985/g" temp1 > temp2
sed -e "s/ZZZZ/-4.3435/g" temp2 > data.case
rm -fr temp1 temp2
但是當您必須處理3個以上的替換時,我認為這不是最緊湊或最有效的方法。
謝謝
謝謝
使用一個選項在同一sed中執行幾個命令:
sed "s/XXXX/1.34555/g; s/YYYY/2.985/g"; s/ZZZZ/-4.3435/g" data.base > data.case
$ cat sedcommands
s/XXXX/1.34555/g
s/YYYY/2.985/g
s/ZZZZ/-4.3435/g
$ sed -f sedcommands data.base > data.case
您可以在awk中使用關聯數組
awk 'BEGIN{
# add as needed
s["XXXX"]=1.3455
s["YYYY"]=2.985
s["ZZZZ"]=-4.3435
}
($2 in s) { print $1,s[$2] }' file
輸出
$ ./shell.sh
1234 1.3455
4321 1.3455
9884 -4.3435
5454 2.985
4311 2.985
9882 -4.3435
9976 -4.3435
sed -e“ s / XXXX / 1.34555 / g; s / YYYY / 2.985 / g; s / ZZZZ / -4.3435 / g”
或將它們放在cmd文件中並列出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.