【问题标题】:How to replace a specific character in a file, only on the lines by counting this specific character in the line?如何仅通过计算行中的特定字符来替换文件中的特定字符?
【发布时间】:2019-06-05 12:03:15
【问题描述】:

我希望将第 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

但是具体的工作我不知道怎么做……

【问题讨论】:

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


    【解决方案1】:

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

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

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

    不过,使用 awk 会更容易一些:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-16
      • 2019-05-25
      • 1970-01-01
      • 2021-08-23
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多