从文本文件中读取第 9 列并将第 11 列替换为同一文件

从文本文件中读取第 9 列并将第 11 列替换为同一文件

我想使用“~”分隔符读取文本文件的第 9 列,并且需要从中检索驻留在表中的相应第 11 列的数据。我需要替换当前具有 NULL 值的文件第 11 列中的数据。

如何在unix中实现这一点。

col1~col2~col3~col4~col5~col6~col7~col8~col9~col10~col11~col12~col13

data1~data2~data3~data4~data5~data6~data7~data8~data9~data10~~data12~data13

数据 data11 为 null 。所以我想取data9的相应值并替换data11。

谢谢

答案1

如果您只想将第 9 列复制到第 11 列,可以使用如下脚本来完成:

awk 'BEGIN {FS="~"; OFS="~"}{$11=$9; print}' <filename>

如果第一个文件只有一行,您可以执行以下操作:

awk -v val=$(awk -F\~ '{print $9}' <filename b>) 'BEGIN {FS="~"; OFS="~"}{$11=val; print}' <filename a>

答案2

不确定我是否完全理解。这会接近吗?

awk -F~ '!$11 {$11 = $9}1' OFS="~" file
col1~col2~col3~col4~col5~col6~col7~col8~col9~col10~col11~col12~col13
data1~data2~data3~data4~data5~data6~data7~data8~data9~data10~data9~data12~data13

相关内容