쉘 스크립트를 사용하여 문자를 검색하고 추출한 후 파일로 저장하는 방법?

foruses의 이미지

435 3190
435 3293
435 2982
132 1023
132 9023
132 3982
132 30223
999 53323
999 232982
....
....
....
첫번째 컬럼의 숫자가 같은것만 추출해서 자동으로 (자료의 양이 매우 많고 추출될 열의 개수도 다릅니다.) 독립된 파일로 저장하려면 어떻게 해야 하나요?
가령 아래처럼요. 감사합니다.

$cat a1.dat
435 3190
435 3293
435 2982

$cat a2.dat
132 1023
132 9023
132 3982
132 30223

$cat a3.dat
999 53323
999 232982

Hodong Kim@Google의 이미지

이거는 좀... 난이도가 있네요.
첫번째 컬럼이 정렬이 되어 있나요?
아.. 정렬이 안 되어 있어도 상관 없을 거 같네요.
data 파일 열어서 읽으면서,
첫번째 컬럼 숫자로 file 이름을 만들고,
file 이름에다가 데이터 쓰면 될 것 같네요.

Hodong Kim@Google의 이미지

셀 스크립트는 몰라서 GG 쳤고
루비로 했는데, 난이도가 높을 줄 알았는데 허무하게 끝났네요..

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
 
File.open("data.txt", "r") do |f1|
  f1.each_line do |line|
    filename = line.split(' ')[0]
    File.open(filename + ".dat", "a") do |f2|
      f2.puts line
    end
  end
end

hodong@debian:~/aaa$ ruby data.rb 
hodong@debian:~/aaa$ ls
132.dat  435.dat  999.dat  data.rb  data.txt
hodong@debian:~/aaa$ more 132.dat 
132 1023
132 9023
132 3982
132 30223
hodong@debian:~/aaa$ more 435.dat 
435 3190
435 3293
435 2982
hodong@debian:~/aaa$ more 999.dat 
999 53323
999 232982
파이썬3의 이미지

파일오픈 두번 중첩되니깐 머리가 띵~하면서 이해가 오려다 말았어요,,,
소중한 루비 코드 감사합니다^^^

[우분투 18.04 파여폭스에서 적었어요~ ibus-hangul(서라운딩 패치판)]

bushi의 이미지

bash

while read a b; do
  echo -en "$a $b\n" >> "$a.dat"
done < data.txt
파이썬3의 이미지

이렇게 간결한 코드로 결과물을 만들어냈다는 사실에 정말 충격을 받았어요~

[ibus-hangul(서라운딩 패치판)에서 작성했습니다 우분투 18.04/파여폭스]

foruses의 이미지

bash로 한번에 되다니 경이롭네요!
루비는 안써봤지만 혹시 모르니 잘 적어놓겠습니다~

파이썬3의 이미지

한참 걸려서 겨우 결과물 만들었네요,,,
코드가 개판오분전입니다 결과만 겨우 출력되네요;;;

# -*- coding: utf-8 -*-
 
f = open("data.txt", "r")
lines = f.readlines()
 
wf = []
for x in lines:
	wf.append(x.split()[0])
 
uf = sorted(list(set(wf)))
 
def make_file(xyz):
	with open("{}.dat".format(xyz), "w") as mf:
		for x in lines:
			if xyz in x:
				mf.write(x)
 
uf = map(lambda xyz: make_file(xyz), uf)
for x in uf:
	if x == None:
		print("Thanks^^^")
 
f.close()
황병희의 이미지

uf = map(lambda xyz: make_file(xyz), uf)
for x in uf:
	if x == None:
		print("Thanks^^^")


for x in uf:
        make_file(x)

로 정정합니다.

--
^고맙습니다 감사합니다_^))//

,,의 이미지

racket scheme 버전입니다.

(map (lambda (x)
       (with-output-to-file (string-append (car (string-split x)) ".dat")
         (lambda () (printf (string-append x "\n"))) #:exists 'append))
     (file->lines "data.txt"))
파이썬3의 이미지

emacs lisp 와 많이 닮은거 같아요,,, 신비롭습니다~

[우분투 18.04 ibus-hangul(서라운딩 패치판) 파여폭스에서 작성했씁니다]

foruses의 이미지

저는 포트란과 쉘언어에서 벗어나지 못하는 올드?한 사람인데...
덕분에 루비, 파이선, 래킷...버전 즐겁게 구경했습니다.ㅎㅎ혹시 줄리아까지 등장?
꾸벅~

익명 사용자의 이미지

awk '{print>$1}' < data.txt
foruses의 이미지

쐐기를 박아 버리는 한줄짜리 커맨드...! 감사합니다.
혹시 사소하지만 .dat 를 확장자로 붙이려면요?

,,의 이미지

.dat 를 붙이려면,

awk '{print>$1".dat"}' < data.txt

처럼 하면 되네요. 덕분에 하나 배워갑니다.
익명 사용자의 이미지

천하제일코딩대회 위너님이시네요. 다들 지리산에서 도 닦다 오셨나봐요 ㅋㅋㅋ

foruses의 이미지

특히 bash 나 awk 로 되는 것도 놀랍지만, 그걸 알고 계신다는 것도 더 놀랍네요.

황병희의 이미지

awk 에 머리를 숙입니다. 진짜 짧네요 ㅠㅠㅠ

--
^고맙습니다 감사합니다_^))//

댓글 달기

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