如何通过仅计算行中的特定字符来替换文件中的特定字符?

时间:2019-01-10 15:16:53

标签: terminal command command-line-interface text-processing

我想在文件夹的所有csv中将第7个逗号和第7个逗号分隔为第四个逗号

在此命令行中,我将第四个逗号加倍:

sed  's/,/,,/4' Person_7.csv > new.csv

在此命令行中,我可以找到并计算一行中的所有逗号:

sed 's/[^,]//g' dat | awk '{ print length }'  

在此命令行中,我可以计算并创建一个包含7个逗号的行的新文件:

awk -F , 'NF == 7' <Person_test.csv >Person_7.csv

但是我不知道该怎么做...

1 个答案:

答案 0 :(得分:1)

您需要选择仅包含7个逗号的行,然后仅对这些行进行操作。您可以使用sed来做到这一点:

sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'

其中^\([^,]*,\)\{7\}[^,]*$定义了一行,该行恰好包含7个逗号。

但是,使用awk会容易一些

awk -F, -v OFS=, 'NF == 8 { $4 = $4 OFS } 1'

这会将输入和输出字段分隔符设置为,,然后对于具有8个字段(7个逗号)的行,在第4个字段的末尾附加一个,,使逗号加倍。最后的1确保打印每一行。