这里有多个tsv文件,我想在第二列中添加“XX”字符(标题除外),并将其保存到同一个文件中。
输入:
$ls
file1.tsv file2.tsv file3.tsv
$head -n 4 file1.tsv
a b c
James England 25
Brian France 41
Maria France 18
Ouptut想要:
a b c
James X1_England 25
Brian X1_France 41
Maria X1_France 18
我尝试了这个,但结果没有保存在文件中,并且简单的重定向不起作用:
# this works, but doesn't save the changes
i=1
for f in *tsv
do awk '{if (NR!=1) print $2}’ $f | sed "s|^|X${i}_|"
i=$((i+1))
done
# adding '-i' option to sed: this throws an error but would be perfect (sed no input files error)
i=1
for f in *tsv
do awk '{if (NR!=1) print $2}’ $f | sed -i "s|^|T${i}_|"
i=$((i+1))
done
一些帮助将不胜感激。
答案 0 :(得分:2)
第二列特别容易,因为您只需替换第一个出现的分隔符。
for file in *.tsv; do
sed -i '2,$s/\t/\tX1_/' "$file"
done
如果您的sed
无法识别符号\t
,请使用文字标签(在许多shell中,您使用 ctrl v < / kbd> tab 。)在* BSD(以及MacOS)上你需要-i ''
答案 1 :(得分:1)
AWK解决方案:
awk -i inplace 'BEGIN { FS=OFS="\t" } NR!=1 { $2 = "X1_" $2 } 1' file1.tsv
输入:
a b c
James England 25
Brian France 41
Maria France 18
输出:
a b c
James X1_England 25
Brian X1_France 41
Maria X1_France 18