txt 파일 패턴에 따라 2줄을 1줄로 만들기

choroot의 이미지

이곳을 통해 많은 지식을 배워갑니다.
선배 프로그래머분들께 감사의 말씀을 전하며 질문을 올립니다.

제가 프로그램을 돌리면 다름과 같은 패턴으로 txt 파일이 나옵니다.

index Data1 Data2 Data3
Data4 Data5 Data6

1.0000 3.224e-08 3.144e-08 1.398e-11
1.910e-11 1.654e-11 -2.916e-06
2.0000 3.193e-08 3.208e-08 1.547e-11
1.790e-11 1.669e-11 -2.902e-06

이것을

index Data1 Data2 Data3 Data4 Data5 Data6

1.0000 3.224e-08 3.144e-08 1.398e-11 1.910e-11 1.654e-11 -2.916e-06
2.0000 3.193e-08 3.208e-08 1.547e-11 1.790e-11 1.669e-11 -2.902e-06

와 같이 바꾸어서요, Excel에서 편집하기 쉽게 만들고 싶습니다.
(엑셀에서는 빈 공간을 기준으로 각각의 값을 각각의 셀로 옮기는 기능이 있습니다.)

어떻게 하면 가장 편하게 1줄로 바꿀 수 있을까요?

그럼 답변 부탁드립니다.

ysy05의 이미지

제가 아직 awk에 대해 초보수준이라서, 좀 엉성하지만, 결과는 나오는 것 같습니다.
text file 을 test.txt 라 하면,
cat test.txt |awk '{line=$0;getline;print line, $0;}'

choroot의 이미지

답변 감사드립니다.
제가 좀 더 공부를 해서 awk를 알면 응용이 가능할텐데....지금은 시간도 없고...해야할 일은 너무 많군요...

자세히 보니까 각각의 줄이 바뀔 때마다, 줄 끝에는 line break 가 있더군요.

line break를 없애는 방법만 알면 쉽게 해결될 것 같은데...

line break를 없애는 쉬운 방법이 있을까요?

ysy05의 이미지

^M 기호 말씀하시는 건가요? 저는 주로 vi 에서 파일을 열은후에 :%s/^M//g 로 없애 버려요.
(여기서 ^M은 [CTRL]+V , [CTRL]+M 을 타입해야하구요)

cppig1995의 이미지

빈 줄을 무시하면서 두 줄씩을 합치는 문제로군요. (맞나요?)

#include <stdio.h>
#include <string.h>
 
int main()
{
	char line[1 << 9];
	size_t linelen;
	while(fgets(line, sizeof(line), stdin))
	{
		linelen = strlen(line);
		if(linelen == 1)
		{
			puts("");
			continue;
		}
		line[strlen(line) - 1] = '\0';
		printf("%s ", line);
		if(!fgets(line, sizeof(line), stdin)) break;
		printf("%s", line);
	}
}

right tool for the right job(맞나요?)은 아닐지 몰라도 C로 짜니 편하군요. :)
그나저나 "line break를 없앤다"고 하시면;;;

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

임종규의 이미지

메모장밖에 에디터가없어서 정규식을 사용할수 없어서 엑셀 깔려 있다면 그냥 엑셀로 한줄로 만드시죠?

파일 불러들린 후 공백문자를 구분문자로 읽어드리면...

A1 B1 C1 D1
A2 B2 C2
...(반복패턴..)

위와 같이 될텐데...

A1 B1 C1 D1 E1=if(D1<>"",A1&" "&B1&" "&C1&" "&D1&" "&A2&" "&B2&" "&C2,"")
A2 B2 C2

E1 셀에 위와 같이 입력하면 될거 같은데요...

그다음은 뭐 쭈욱 드래그 하면 되겟죠...

/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();

/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();

임종규의 이미지

그래서 다시 해봣습니다.

찾을 문자열 : {.+}:b{.+}:b{.+}:b{.+}\n{.+}:b{.+}:b{.+}
바꿀 문자열 : \1 \2 \3 \4 \5 \6 \7
정규식 사용 체크

(vs2005 에서는 태그를 {}로 표현하더군요.. 일반적으로 다른 에디터는 ()를 쓰는데... :b 는 공백문자를 뜻합니다. \n는 개행문자...)

/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();

/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();

choroot의 이미지

생각해보니 단순한 문제가 아니더군요....

단순히 line break를 없애는 것이 아니라, Index를 중심으로 한줄 한줄 만들어야 하기 때문에,

특정 패턴을 읽고, line break를 없애는 방법을 알아내야할 듯 합니다.

어떤 툴, 프로그램을 익히는 것이 가장 빠를까요?

선배 프로그래머 분들의 조언을 부탁드립니다.

eseo의 이미지

어설프게 만들어봤습니다.

awk '{if( $1 ~ /.0000/) printf ("%s", $0);else print $0; }' test.dat

첫번째 필드를 검사해서 index 면 line break 없이 출력하도록 하였습니다.
(index 는 항상 x.0000 형식으로 나오는것으로 가정)

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

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

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.