如何在文本文件中插入相同编号的列?

如何在文本文件中插入相同编号的列?

我有像::: 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是您想要在第二列中出现的变量,其余所有列均按原样打印

相关内容