두 개의 텍스트 파일이 있는데 각 파일에는 숫자 열이 포함되어 있습니다. 이 두 요소 열을 어떻게 분리하고 새 열을 새 텍스트 파일에 저장할 수 있습니까? 나는 이것을 시도했지만 성공하지 못했습니다.
declare -a col1
declare -a col2
col1=`awk '{print $1}' File1.txt`
col2=`awk '{print $1}' File2.txt`
awk '{print $File1/$File2} > File3.txt
답변1
나누기가 수학적 나누기를 의미하는 경우 다음을 시도해 보세요.
paste inf1 inf2 | awk '{print($1/$2)}'
inf1
과 는 inf2
두 개의 파일이라고 가정합니다 .하나숫자 열(예:
$ seq 10 30 > inf1
$ seq 2 22 > inf2
$ paste inf1 inf2 | awk '{print($1/$2)}'
5
3.66667
3
2.6
2.33333
2.14286
2
1.88889
1.8
1.72727
1.66667
1.61538
1.57143
1.53333
1.5
1.47059
1.44444
1.42105
1.4
1.38095
1.36364
특정 형식이 필요한 경우 printf
대신 를 사용하세요 print
.
그 경우~ 해야 하다쉘에서 완료(bash 코드, 필요한 경우 변환 가능):
$ readarray -t a <inf1
$ readarray -t b <inf2
$ for ((i=0;i<${#a[@]};i++)); do
printf '%8.4f\n' "$((10000000*a[i]/b[i]))e-7"
done
5.0000
3.6667
3.0000
2.6000
2.3333
2.1429
2.0000
1.8889
1.8000
1.7273
1.6667
1.6154
1.5714
1.5333
1.5000
1.4706
1.4444
1.4211
1.4000
1.3810
1.3636
답변2
dc는 작업을 위한 훌륭한 도구입니다.
dc -f File1.txt -f File2.txt -e '5kzdsa2/sb[la:zla1-dsa0<m]smlmx[la1+ddsa;zrlb+;z/pclbla<n]snlnx' > File3.txt
그리고 첨부된 댓글은 다음과 같습니다.
dc -f File1.txt -f File2.txt -e '
# set the precision
5k
# keep the number of item in register a and the half in register b
z d sa 2 / sb
# populate indexed register z from z[1] to z[number of item]
[la :z la 1 - d sa 0 <m]sm lmx
# get 2 items from register z and divide them
[ la 1 + d d sa ;z r lb + ;z / p c lb la <n ]sn lnx' > File3.txt