如何用awk替换特定列的内容?


31

给定:一条记录​​中有40列。我想替换第35列,以便将第35列替换为第35列的内容和“ $”符号。我想到的是:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

它可以工作,但是因为当列数最大为10k时不可行。我需要一个更好的方法来做到这一点。

Answers:



8

可能有更有效的方法来执行此操作。注意:

awk '{$35 = $35"$"; print}' infile > outfile

3

如果字段定界符为<space>

sed 's/  */$&/35'

如果字段定界符未知:sed 's/./$&/35'
2015年

@Underverse-我不认为这是同一回事。那应该在输入行上第35个字符加前缀字符$-是否定界。上面的内容应该将第35个出现的定界符char固定在第35个字段上,换句话说,第35个字段与char固定在一起,$无论每个字段中的char 如何。
mikeserv

啊,“记录中有40列”。我将“第35列”读为“文本文件的第35个字符列”。
2015年

3

为了保留原始的“现场分隔符”,我这样做了。我想清空的列是数字$ 12。

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

使用gawk -i,如果有,您可以在适当的位置编辑文件。


1

如果使用“批准的”答案有问题,它将取代文件中的仅第一列。我使用以下通用命令:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

哪里:

  • [column] =要更改的列,从1(非0)开始
  • [replace] =您要替换的文字

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ...在几秒钟内替换了一百万个时间戳!!:)
roblogic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.