第一个文件,file_utm:
1.3 3.5 2.8
2.1 1.4
0.5
第二个文件,file_ltm:
1.3
3.5 2.1
2.8 1.4 0.5
一个条件,if i=j; then i=j=0; fi
输出文件:
0 1.3 3.5 2.8
1.3 0 2.1 1.4
3.5 2.1 0 0.5
2.8 1.4 0.5 0
这就是我的尝试:
#!/bin/bash
for (( x=1; x<=3; x++ ))
do
awk -v var=$x 'NR==var' file_utm > ROW
awk -v var=$x 'NR==var' file_ltm > COLUMN
for (( y=1; y<=3; y++ ))
do
R=`awk -F "\t" -v var=$y '{print $var}' ROW`
C=`awk -F "\t" -v var=$y '{print $var}' COLUMN`
echo $R >> file
echo $C >> file
rm ROW
rm COLUMN
done
done
我拥有的另一个选项是用一个只有空格的矩阵填充一个文件,用制表符分隔,然后通过给定一个值填充这个矩阵并寻址行和列位置。我知道如何用C ++做,但不是用bash和awk。
答案 0 :(得分:2)
Awk 解决方案:
awk 'NR==FNR{ a[NR+1]=$0 FS 0; next }{ sub(/^ +/,""); print (FNR==1)? 0:a[FNR],$0 }
END{ print a[FNR+1] }' file_ltm file_utm
输出:
0 1.3 3.5 2.8
1.3 0 2.1 1.4
3.5 2.1 0 0.5
2.8 1.4 0.5 0
答案 1 :(得分:1)
使用文件描述符5和6
读取这两个文件# opening files descriptor for reading
exec 5< file_utm || exit 1
exec 6< file_ltm || exit 1
read -u5 up
echo "0 $up"
while read -u5 up; read -u6 low; [[ $low ]]; do
echo "$low 0 $up"
done
# closing files
exec 5>&-
exec 6>&-