쉘 프로그래밍 질문입니다. 두개의 파일내용을 비교하고 싶어요

dnjstnfk의 이미지

두개의 파일을 비교해서 출력을 하고 싶습니다.

a.txt
파일 내용은
|코드값|시간|

1 091232
2 091134
3 083232

b.txt
2 083333
3 093422

파일내용은 이렇구요
a.txt의 첫번째 라인의 내용을 가져오고
b.txt의 첫번째 라인의 내용도 가져옵니다.

a.txt의 첫번째 라인의 코드값과 b.txt의 첫번째 라인의 코드값이 같으면
불러온 두파일의 시간을 비교해서 시간 값이 더 큰 아이를 출력하고
a.txt의 두번째 라인으로 넘어가서 b.txt첫번째 라인부터 새로 비교를 합니다.

코드값이 다르다면
b.txt의 두번째 라인을 가져와 a.txt의 첫번째 라인의 코드값과 비교 마찬가지
같으면 시간비교 아니면 b.txt의 다음줄과 비교하는 식입니다.

b.txt에 같은 코드가 값이 없다면 그냥 a.txt를 출력

결과는
1 091232
2 091134
3 093422

초보라... 제가 아무것도 모르고 짜본 내용은

INPUT=a.txt

flag=0

while read line;
do
a="$line"
a_time=$(echo "$a"|cut -c 34-41)
a_code=$(echo "$a"|cut -c 6-17)

INPUT2=b.txt
while read line2;
do
b="$line2"
b_time=$(echo "$b"|cut -c 34-41)
b_code=$(echo "$b"|cut -c 6-17)

if [ a_code -eq a_code ]
then
flag=1
if [ a_time -ge b_time ]
then
echo "$a_code $a_time" >> data
break
else
echo "$b_code $b_time" >> data
fi
fi
done < $INPUT2

#일치하는 종목이 없으면 a값 그대로 넣어준다
if [ flag == 0 ]
then
echo "$a_code $a_time" >> data

done < $INPUT

두개의 파일을 다 열어서 그런가.. 되지 않네요 소스는 일단 틀렸지만 이해하기 쉬우시라고
짜봤습니다 ㅠㅠ

eseo의 이미지

동작 코드 올려봅니다.

#!/bin/sh
 
while read a_code a_time
do
	while read b_code b_time
	do
		if [ $a_code -eq $b_code ] && [ $a_time -lt $b_time ]
		then
			string="$b_code $b_time"
			break
		else
			string="$a_code $a_time"
		fi
	done < b.txt
 
	echo $string
 
done < a.txt

break를 쓰니 좀더 간단해 지네요

---
배려하는 마음을 갖자.

iknights의 이미지

cat a.txt b.txt | sort -u -r | awk 'BEGIN{idx=-1} { if(idx!=$1) {idx=$1; print $0} }' | sort

브이~

qiiiiiiiip의 이미지


b.txt에만있고, a.txt에는 없는 코드값의 경우에도 b.txt의 내용이 출력된다는 점에서
원래 문제의 조건에 조금 벗어나네요..

qiiiiiiiip의 이미지

입력파일이 코드값을 기준으로 잘 정렬되어있고, 코드값이 uniq하다고 하면
join 명령어가 적당해 보입니다. 아래와 같이 할 수 있습니다..

$ join -a 1 a.txt b.txt | awk '{ if ( $3 > $2 ) {print $1, $3} else {print $1, $2}}'

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.