使用awk / sed更改特定的列值

时间:2018-07-31 17:06:31

标签: awk sed

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

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

我用上面的命令替换了第11列。但是此文件的输出将分隔符更改为“ space”。我不能仅仅从输出文件中删除空间,因为很少有列也具有有效空间。

3 个答案:

答案 0 :(得分:3)

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

" "

答案 1 :(得分:0)

sed -re 's/(^\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)([^|]*)\|(.*)/\11|\3/'

通过此过滤文件。

答案 2 :(得分:0)

您可以尝试使用此sed:

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

如果您只想从0更改为1

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