很抱歉有一个非常基本的问题。如何使用某个字符串替换制表符分隔文件中的特定列,例如“xyz”?
e.g。
输入:
abc\t def\t \t xyz
pqr\t ert\t \t yut
输出:
abc\t def\t new_str\t xyz
pqr\t ert\t new_str\t yut
简而言之,我文件中的第3列是空的,我想用字符串替换它。
我绑了这样的东西:
awk '{$3="new_str"}1' test1.csv > test1_op.csv
但看起来它没有维护标签。另请注意,该文件有400列,因此编写一个类似这样的awk命令:
awk -F, '{OFS=",";print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,...,$400}' in.csv > outfile.csv
我想避免。
感谢。
答案 0 :(得分:5)
由于它是制表符分隔的,因此您可以通过拆分选项卡而不是awk
在任何空格上拆分的默认值(空格,制表符的任意组合以及可能的其他更深奥的类型)在正确的轨道上)。完成后,您可以直接分配到要更改的列,然后再次打印$ 0.
awk -F$'\t' 'BEGIN {OFS="\t"} {$3="new_str"; print}' in.csv > outfile.csv
awk
还可以处理出现在其输入文件列表中的变量赋值,因此看起来更清晰:
awk '{$3="new_str"; print}' FS=$'\t' OFS=$'\t' in.csv > outfile.csv
答案 1 :(得分:2)
这可能适合你(GUN sed):
sed -i 's/\t/new_str&/3' file
答案 2 :(得分:1)
目前尚不清楚你想要如何处理空白,但也许你只想要:
awk '{$3="new_str"}1' FS=\\t OFS=\\t
请注意,这会丢弃最初在$3
中的空格。你可以保留它:
awk '{$3=$3"new_str"}1' FS=\\t OFS=\\t
或
awk '{$3=" new_str"}1' FS=\\t OFS=\\t
取决于您的需求。