更新分隔行中的第 n 个元素 [unix 脚本]
Posted
技术标签:
【中文标题】更新分隔行中的第 n 个元素 [unix 脚本]【英文标题】:Update nth element in delimited line [unix scripting] 【发布时间】:2021-12-17 16:10:44 【问题描述】:我有一个包含逗号分隔行的 .temp 文件:
abc,1,000,aaa,zzz,2,234,OOO,00001,01,123,214
def,2,003,bbb,yyy,4,345,PPP,00002,02,133,224
ghi,3,011,ccc,xxx,6,456,QQQ,00003,03,143,234
jkl,4,012,ddd,www,8,567,RRR,00004,04,153,244
...
每行被读取,第 3 列用于更新第 9 列
我可以这样做:
indexToUpdate=9
updatedLine="$(echo "$line" | sed "s/[^,]*/$new9thColumnData/$indexToUpdate")"
我的问题是,除了使用 sed 之外,还有更快的方法来更新第 9 列数据吗?
【问题讨论】:
有很多方法可以实现(想到剪切和粘贴)但是这个用第三列替换第 9 列的 GNU sed 解决方案可能会有所帮助 -sed -E 's/(([^,]*,)3([^,]*,)5)[^,]*,/\1\2/' file
【参考方案1】:
除了 potong 的 suggestion,您还可以使用例如awk:
awk -F ',' ' OFS=FS; $9=$3; print ' file
【讨论】:
【参考方案2】:perl -lanF, -e 'print join ",", @F[0..7,2,9..$#F]' file
或者,像上面的 awk:
perl -lanF, -e '$F[8]=$F[2]; print join ",", @F' file
使用 perl 的自动拆分以逗号分隔,从而创建 @F 数组,然后以不同的顺序打印。
并不是说 perl 比 sed 或 awk 快...
【讨论】:
以上是关于更新分隔行中的第 n 个元素 [unix 脚本]的主要内容,如果未能解决你的问题,请参考以下文章