输入文件1的内容:
David 734.838.9801
Roberto 313.123.4567
Sally 248.344.5576
Mary 313.449.1390
Ted 248.496.2207
Alice 616.556.4458
Frank 634.296.1259
输入文件2的内容:
Roberto Tuesday 2
Sally Monday 8
Ted Sunday 16
Alice Wednesday 23
David Thursday 10
Mary Saturday 14
Frank Friday 15
如何使用脚本中的输出重定向并使用循环结构,将两个文件组合在一起使其看起来如下所示?所以我打开了一个名为output.sh的新vi文件,我插入了join inputfile1 inputfile2> output.sh。当我尝试用bash output.sh运行它时,它告诉我文件1不是按排序顺序和2然后ted命令未找到alice命令未找到哪些是名称。
Name On-Call Phone Start Time
Sally Monday 248.344.5576 8am
Roberto Tuesday 313.123.4567 2am
Alice Wednesday 616.556.4458 11pm
David Thursday 734.838.9801 10am
Frank Friday 634.296.1259 3pm
Mary Saturday 313.449.1390 2pm
Ted Sunday 248.496.2207 4pm
答案 0 :(得分:0)
试试这个脚本,它可以帮助您获得预期的结果。
echo "Name\tOn-call\t\tPhone\t\tStart time" >anotherfile
while IFS=' ' read f1 f2;do
while IFS=' ' read f3 f4 f5 ; do
if [ $f1 = $f3 ] ; then
if [ $f5 -gt 12 ] ; then
echo "$f1\t$f4\t$f2\t `echo "$f5 - 12" | bc`pm" >>anotherfile.txt
else
echo "$f1\t$f4\t$f2\t$f5 \bam" >>anotherfile.txt
fi
fi
done <file2
done <file1
答案 1 :(得分:0)
这将on-call.txt和phone-number.txt文件的内容组合到一个数组中。此外,它将24小时时间格式转换为AM和PM,然后按天显示输出。
#!/bin/bash
Person=( $(cat phone.txt on-call.txt| egrep "[a-z]|[A-Z]"| sort| paste - -) )
echo -e "Name\tOn-Call\tPhone\tStart Time"
for day in Monday Tuesday Wednesday Thursday Friday Saterday Sunday; do
x=0
z=0
until [ $z = $(( ${#Person[@]} / 5 )) ]; do
if [ $day = ${Person[$(($x + 3))]} ]; then
if [ ${Person[$(($x+4))]} -ge 13 ]; then
Person[$(($x+4))]="$(( ${Person[$(($x+4))]} - 12 ))pm"
else
Person[$(($x+4))]="${Person[$(($x+4))]}am"
fi
echo -e ${Person[$(($x+0))]}"\t"${Person[$(($x+3))]}"\t"${Person[$(($x+1))]}"\t"${Person[$(($x+4))]}
fi
let "x += 5"
let z++
done
done