匹配任何列中的数据,并更改同一行中所有其他列的数据
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,---,---,---,---
我正在尝试找出如何在 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,---,---,---,---