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)
我想避免.
谢谢.
由于它是制表符分隔的,因此您可以通过在选项卡上拆分而不是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)