【问题标题】:change a particular column value using awk / sed使用 awk / sed 更改特定列的值
【发布时间】:2018-08-01 02:47:49
【问题描述】:

我有一个包含 52 列的文件。我想将第 11 列从 0 替换为 1。我文件中的所有数据都是“|”分开。我尝试了以下命令。

awk -F \| '{$11=1; print}' input_file.txt 

我已将第 11 列替换为上述命令。但是该文件的输出将分隔符更改为“空格”。我不能只从 outfile 中删除空格,因为很少有列也有有效空格。

【问题讨论】:

    标签: awk sed


    【解决方案1】:

    awk 脚本的BEGIN 子句中将OFS (output field seperator) 设置为与FS(使用-F 标志设置的字段分隔符)相同,否则设置为默认值@ 987654327@

    awk -F \| 'BEGIN{OFS=FS}{$11=1; print}' input_file.txt 
    

    【讨论】:

      【解决方案2】:
      sed -re 's/(^\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)([^|]*)\|(.*)/\11|\3/'
      

      通过此过滤您的文件。

      【讨论】:

        【解决方案3】:

        你可以试试这个 sed:

        sed -E 's/(([^|]*\|){10})[^|]*(.*)/\11\3/' infile
        

        如果你只想从 0 变为 1

        sed -E 's/(([^|]*\|){10})0(.*)/\11\3/' infile
        

        【讨论】:

          猜你喜欢
          • 2021-05-24
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 2021-05-03
          • 1970-01-01
          • 2011-01-10
          • 2020-06-29
          • 2019-09-16
          相关资源
          最近更新 更多