【发布时间】:2018-08-01 02:47:49
【问题描述】:
我有一个包含 52 列的文件。我想将第 11 列从 0 替换为 1。我文件中的所有数据都是“|”分开。我尝试了以下命令。
awk -F \| '{$11=1; print}' input_file.txt
我已将第 11 列替换为上述命令。但是该文件的输出将分隔符更改为“空格”。我不能只从 outfile 中删除空格,因为很少有列也有有效空格。
【问题讨论】:
我有一个包含 52 列的文件。我想将第 11 列从 0 替换为 1。我文件中的所有数据都是“|”分开。我尝试了以下命令。
awk -F \| '{$11=1; print}' input_file.txt
我已将第 11 列替换为上述命令。但是该文件的输出将分隔符更改为“空格”。我不能只从 outfile 中删除空格,因为很少有列也有有效空格。
【问题讨论】:
在awk 脚本的BEGIN 子句中将OFS (output field seperator) 设置为与FS(使用-F 标志设置的字段分隔符)相同,否则设置为默认值@ 987654327@
awk -F \| 'BEGIN{OFS=FS}{$11=1; print}' input_file.txt
【讨论】:
sed -re 's/(^\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)([^|]*)\|(.*)/\11|\3/'
通过此过滤您的文件。
【讨论】:
你可以试试这个 sed:
sed -E 's/(([^|]*\|){10})[^|]*(.*)/\11\3/' infile
如果你只想从 0 变为 1
sed -E 's/(([^|]*\|){10})0(.*)/\11\3/' infile
【讨论】: