【问题标题】:Mask out selected delimited columns屏蔽选定的分隔列
【发布时间】:2018-02-16 12:17:25
【问题描述】:

我希望使用 shell 脚本在某些列中用 X 屏蔽某些数据。例如,我想屏蔽第一列以使新文件中只有 X 。不确定实现此目的的最佳方法。

输入

DL1234, 454890, tall, A, A7, 1234, 457, Male, Active

期望的输出

XXXXXX, 454890, tall, A, A7, 1234, 457, Male, Active

【问题讨论】:

    标签: shell awk text-processing csv


    【解决方案1】:

    您可以使用awk 和逗号字段分隔符,并且只修改$1

    s='DL1234, 454890, tall, A, A7, 1234, 457, Male, Active'
    
    awk 'BEGIN{FS=OFS=","} {gsub(/./, "X", $1)} 1' <<< "$s"
    XXXXXX, 454890, tall, A, A7, 1234, 457, Male, Active
    

    编辑:

    要更新多个字段:

    awk -v cols='1,3,7' 'BEGIN{FS=OFS=", "} {
    n=split(cols, a, /,/); for (i=1; i<=n; i++) gsub(/./, "X", $a[i])} 1' <<< "$s"
    
    XXXXXX, 454890, XXXX, A, A7, 1234, XXX, Male, Active
    

    这里我们将要更新的列号列表作为命令行参数传递。

    【讨论】:

    • 一般来说,可以使用对所需列号的循环。
    • @anubhava 嗨,是的,非常感谢!你有一个多列循环工作的例子吗?
    • @anubhava 嗨,如果分隔符是“^^”,解决方案会有所不同。这将是两个字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多