如何仅通过计算行中的特定字符来替换文件中的特定字符?
How to replace a specific character in a file, only on the lines by counting this specific character in the line?
我想将第 7 行中的第 4 个逗号加倍,而在一个文件夹的所有 csv 中只有 7 个逗号。
在此命令行中,我将第 4 个逗号加倍:
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
但是不知道具体的工作怎么做...
您需要 select 仅包含正好包含 7 个逗号的行,然后仅对这些行进行操作。你可以用 sed:
sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'
其中 ^\([^,]*,\)\{7\}[^,]*$
定义了恰好包含 7 个逗号的行。
不过使用 awk 会更容易一些:
awk -F, -v OFS=, 'NF == 8 { = OFS } 1'
这会将输入和输出字段分隔符设置为 ,
,然后对于具有 8 个字段(7 个逗号)的行,在第 4 个字段的末尾附加一个 ,
,将逗号加倍。最后的 1
确保打印每一行。
我想将第 7 行中的第 4 个逗号加倍,而在一个文件夹的所有 csv 中只有 7 个逗号。
在此命令行中,我将第 4 个逗号加倍:
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
但是不知道具体的工作怎么做...
您需要 select 仅包含正好包含 7 个逗号的行,然后仅对这些行进行操作。你可以用 sed:
sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'
其中 ^\([^,]*,\)\{7\}[^,]*$
定义了恰好包含 7 个逗号的行。
不过使用 awk 会更容易一些:
awk -F, -v OFS=, 'NF == 8 { = OFS } 1'
这会将输入和输出字段分隔符设置为 ,
,然后对于具有 8 个字段(7 个逗号)的行,在第 4 个字段的末尾附加一个 ,
,将逗号加倍。最后的 1
确保打印每一行。