:::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
2番目の列に同じ数字を追加したいです。ループでこれを行うにはどうすればよいですか?
答え1
3つのネストループが必要です
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
2番目の列に表示したい変数で、残りの列はすべてそのまま印刷されます。