我有像::: a.txt 这样的输入文件
1 0.4 0.8
2 0.5 3.0
5 0.8 3.5
我想要这样的输出::: 1.txt
1 3 0.4 0.8
2 3 0.5 3.0
5 3 0.8 3.5
1 8 0.4 0.8
2 8 0.5 3.0
5 8 0.8 3.5
我想在第二列中添加相同的数字。在循环中我该怎么做?
答案1
您需要三个嵌套循环
for n in 3 8 ; do
while read -a cols ; do
printf '%s %s' "${cols[0]}" $n
for ((i=1; i<=${#cols[@]}; i++)) ; do
printf ' %s' "${cols[i]}"
done
echo
done <a.txt
echo
done > 2.txt
您还可以使用 sed:
for n in 3 8 ; do
sed "s/ / $n /" a.txt
echo
done > 1.txt
答案2
您还可以使用awk
来获得预期的输出,
for i in {3,8}; do awk -v a=$i '{print $1,a,$2,$3}' a.txt; echo "" ; done > 1.txt
解释:
这里-v
选项 ( var=value
) 用于将任何变量传递给 awk
print {$1,a,$2,$3}
,这a
是您想要在第二列中出现的变量,其余所有列均按原样打印