如何用一些字符串替换CSV中的特定列?

Bhu*_*han 2 bash shell perl awk sed

抱歉,这是一个非常基本的问题 如何用一些字符串替换制表符分隔文件中的特定列,比如说"xyz"?

例如

输入:

abc\t  def\t   \t   xyz
pqr\t  ert\t   \t   yut 
Run Code Online (Sandbox Code Playgroud)

输出:

abc\t  def\t   new_str\t   xyz
pqr\t  ert\t   new_str\t   yut
Run Code Online (Sandbox Code Playgroud)

简而言之,我文件中的第3列是空的,我想用字符串替换它.

我绑了这样的东西:

awk '{$3="new_str"}1' test1.csv > test1_op.csv
Run Code Online (Sandbox Code Playgroud)

但看起来它没有维护标签.另请注意,该文件有400列,因此编写一个类似下面的awk命令:

awk -F, '{OFS=",";print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,...,$400}' in.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)

我想避免.

谢谢.

che*_*ner 5

由于它是制表符分隔的,因此您可以通过在选项卡上拆分而不是awk在任何空格上拆分的默认值(空格,制表符和可能的其他更深奥的类型的任意组合).完成后,您可以直接分配到要更改的列,然后再次打印$ 0.

awk -F$'\t' 'BEGIN {OFS="\t"} {$3="new_str"; print}' in.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)

awk 也可以处理出现在其输入文件列表中的变量赋值,因此这看起来更清晰:

awk '{$3="new_str"; print}' FS=$'\t' OFS=$'\t' in.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)