Combine text from two files, output to another

淺唱寂寞╮ 提交于 2019-12-02 10:25:31

问题


i'm having a bit of a problem and i've been searching allll day. this is my first Unix class don't be to harsh.

so this may sound fairly simple, but i can't get it

I have two text files

file1

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

file2

Roberto Tuesday‭ ‬2
Sally Monday‭ ‬8
Ted Sunday‭ ‬16
Alice Wednesday‭ ‬23
David Thursday‭ ‬10
Mary Saturday‭ ‬14
Frank Friday‭ ‬15

I am trying to write a script using a looping structure that will combine both files and come out with the output below as a separate file

output:

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

This is what i tried( i know its horrible)

echo " Name     On-Call          Phone      Start Time"
file="/home/xubuntu/date.txt"
file1="/home/xubuntu/name.txt"
while read name2 phone
do
while read name day time
do
echo "$name     $day   $phone           $time"
done<"$file"
done<"$file1"

any help would be appreciated


回答1:


First, sort the files using sort and then use this command:

paste file1 file2 | awk '{print $1,$4,$2,$5}'

This will bring you pretty close. After that you have to figure out how to format the time from the 24 hour format to the 12 hour format.

If you want to avoid using sort separately, you can bring in a little more complexity like this:

paste <(sort file1) <(sort file2) | awk '{print $1,$4,$2,$5}'

Finally, if you have not yet figured out how to print the time in 12 hour format, here is your full command:

paste <(sort file1) <(sort file2) | awk '{"date --date=\"" $5 ":00:00\" +%I%P" |& getline $5; print $1 " " $4 " " $2 " " $5 }'

You can use tabs (\t) in place of spaces as connectors to get a nicely formatted output.




回答2:


In this case join command will also work,

join -1 1 -2 1 <(sort file1) <(sort file2)

Description

-1 -> file1
1  -> first field of file1 (common field)
-2 -> file2
1 -> first field of file2 (common field)


**cat file1**

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

**cat file2**

Roberto Tuesday 2
Sally Monday 8
Ted Sunday 16
Alice Wednesday 23
David Thursday 10
Mary Saturday 14
Frank Friday 15

output

Alice 616.556.4458 Wednesday 23
David 734.838.9801 Thursday 10
Frank 634.296.1259 Friday 15
Mary 313.449.1390 Saturday 14
Roberto 313.123.4567 Tuesday 2
Sally 248.344.5576 Monday 8
Ted 248.496.2207 Sunday 16


来源:https://stackoverflow.com/questions/20185966/combine-text-from-two-files-output-to-another

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!