![如何在文本文件中插入相同编号的列?](https://linux22.com/image/136868/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%92%E5%85%A5%E7%9B%B8%E5%90%8C%E7%BC%96%E5%8F%B7%E7%9A%84%E5%88%97%EF%BC%9F.png)
我有像::: 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
是您想要在第二列中出现的变量,其余所有列均按原样打印