匹配任何列中的数据,并更改同一行中所有其他列的数据

Match data in Any Column, and change data over all Other Columns in Same Row

我正在尝试找出如何在 csv 文件中搜索值,在本例中为“---”,并将同一行中的所有后续列更改为“---”。

我一直想用 awk 来做这件事,但我只能弄清楚如何检查已知字段,

即-

awk '{if ($(NF-1)=="---")$NF="---"}{print [=10=]}' file

我需要找到一种使用 for 循环的方法,我想(这就是我问的原因):

1) 在所有字段中搜索一个值

2) 查找字段中的值,并将同一记录的所有后续字段更改为特定值(即- "---" )

任何想法将不胜感激。如果我的措辞没有传达我在这方面所做的所有不同的试错尝试,我深表歉意,我想知道什么有效,而不是向大家展示什么无效。

让我们考虑这个测试文件:

$ cat file.csv
a,b,---,d,e
1,---,3,4,5

查找 --- 并将同一行中所有前面的列更改为 ---:

$ awk -F, '{f=0; for (i=NF;i>=1;i--) {$i=(f?"---":$i); f=($i=="---")}} 1' OFS=, file.csv
---,---,---,d,e
---,---,3,4,5

或者,查找 --- 并将同一行中的所有后续(后续)列更改为 ---:

$ awk -F, '{f=0; for (i=1;i<=NF;i++) {$i=(f?"---":$i); f=($i=="---")}} 1' OFS=, file.csv
a,b,---,---,---
1,---,---,---,---