我的表中有数据。在一列中,我需要将一些索引(从 1 到 23 的数字)替换为 3-4 位样本数字,例如:2347,3856 等。
所以原来的列看起来像:
SF=1,2
SF=12,7
SF=17,4
输出应该是:
SF=2347,3856
SF=8553,9539
...
问题是:如果我对一个样本(1->2720)执行此操作,那就没问题;但是用某些东西替换 2 会造成混乱等,并且我不知道如何指定应该替换该数字,例如,如果它只是一个(两位)数字?连续的数字可能超过 2 个。
抱歉,如果听起来令人困惑。我是初学者。
更新。谢谢你麦吉克我部分成功了。但由于某种原因,新行是在连续第一次替换后创建的,然后下一个数字显然没有被替换。所以我得到的是:
SF=2347
,2
SF=8553
,7
这是代码:
'sed "s/=${index},/=${sample},/g; s/,${index} /,${sample} /g; s/,${index},/,${sample },/g" 样本.txt'
为什么会发生这种情况?
答案1
我思考,你正在尝试做这样的事情:
$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4
在模式和替换字符串中包含文字“=”和“,”可以让您区分“=1”和“=12”
更新:
取代两个都变量,在 sed 中,可以使用 $ 来匹配行尾。
$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4
当你混合像 ${var} 这样的 bash 变量时,它看起来会很奇怪,但如果你使用双引号,它应该可以工作:
例如,
$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=${a},/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4
顺便说一句,如果您的替换内容很大,您可以使用 sed 中的文件清理所有这些内容。例如,
$ cat ./datascript.sed
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g
然后针对数据运行该文件
$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4
这些文件的缺点是我不知道如何在其中使用变量。