将两个文件合并到另一个文件的shell脚本?

时间:2014-04-17 04:18:24

标签: bash unix

输入文件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

2 个答案:

答案 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
相关问题