윈도우 배치파일에서 awk와 비슷한 명령어가 있을까요?

plob의 이미지

안녕하세요.

쉘 스크립트에서 윈도우 배치파일로 바꾸던 중 비슷한 명령이 없어 질문을 드리게 되었습니다.

1018 92880 24540 7312 4516 2424 172 132 [A]
1016 91688 18776 11244 5516 4300 232 132 [B]
607 78736 14656 4764 3364 1420 116 132 [C]
1020 54812 38740 8684 3572 3276 0 132 [D]
696 45836 25168 6904 2708 3764 0 132 [E]
686 29832 25596 23052 1928 20956 0 132 [A]
703 26124 16432 12544 2368 9692 0 132 [B]
1015 18344 7180 5500 3280 1964 0 132 [C]

이런 식으로 나열되는 텍스트 파일에서 [A]로 끝나는 행의 4번째 열의 숫자만 텍스트파일로 따로 저장을 하고자 하는데요.

findstr 명령을 이용하여 grep과 비슷하게 걸러낼 수 있을 것 같은데 4번째 열의 숫자만 저장을 하려면 어떻게 해야 될지 감이 안잡힙니다.

구글신을 영접해 보았으나 제 영접이 부족했는지 만족할 만한 결과를 찾기 어려워 고수분들께 요청 드립니다.

awk와 비슷한 명령어 또는 방법이 뭐가 있을까요?

익명 사용자의 이미지

유닉스/리눅스의 많은 도구들을 윈도우용으로 포팅해 놓은 것들입니다.
awk도 있지요.

http://gnuwin32.sourceforge.net/packages/gawk.htm

shint의 이미지


올려주신 gawk.exe 도. 도스 프롬프트 cmd.exe 에서 됩니다.

-----------------------------------------------------------
http://yujuwon.tistory.com/entry/awk와-uniq로-중복-제거하기

4번째만 출력
awk 'BEGIN {FS=" "} {print $4}' who.txt

----------------------------------------
awk 사용법 | UNIX Shell 및 팁
http://cafe.naver.com/itpeople/46

짝수만 출력
awk ' { print NR % 2 == 0 }' who.txt

----------------------------------------

짝수만 출력
awk 'BEGIN {FS=" "} { if(NR % 2 == 0){print  $4} }' who.txt

9번째 값이 [A] 인것만 출력
awk 'BEGIN {FS=" "} { if($9 == "[A]"){print  $4} }' who.txt

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

plob의 이미지

그런데 gawk를 쓰지 않고는 불가능할까요?
회사 내 어떤 컴퓨터에서나 바로 사용할 수 있게 하는 것이 목적입니다.

shint의 이미지

- 자바스크립트
- 플래시
- PHP
- C 언어

여러가지 방법이 있겠네요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

Prentice의 이미지

awk "/\[A\]$/ { print $4 }" input.txt
shint의 이미지

...
파일이 없을 경우도 대비해야 하겠습니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

chanik의 이미지

마지막 토큰을 확인하는 방법은 모르겠지만,
9번째 토큰을 확인해서 조건에 맞을 경우 4번째 토큰을 출력하게 하는 건
아래와 같이 가능하겠습니다. Windows XP에서 해봤습니다.

C:\>type test.txt
1018 92880 24540 7312 4516 2424 172 132 [A]
1016 91688 18776 11244 5516 4300 232 132 [B]
607 78736 14656 4764 3364 1420 116 132 [C]
1020 54812 38740 8684 3572 3276 0 132 [D]
696 45836 25168 6904 2708 3764 0 132 [E]
686 29832 25596 23052 1928 20956 0 132 [A]
703 26124 16432 12544 2368 9692 0 132 [B]
1015 18344 7180 5500 3280 1964 0 132 [C]
 
C:\>@FOR /F "tokens=4,9" %G IN ('type test.txt') DO @IF %H == [A] echo %G
7312
23052
 
C:\>type test.bat
@echo off
rem 배치파일 안에서 쓰려면 % 대신 %%를 씁니다
FOR /F "tokens=4,9" %%G IN ('type test.txt') DO IF %%H == [A] echo %%G 
 
C:\>test.bat
7312
23052
optimistichacker의 이미지

배치 파일의 문법으로는 한계가 있습니다.

VBScript 혹은 JScript를 이용해 Windows Script Host로 돌아가는 스크립트를 만드세요.

Dim sLine
Do Until WScript.StdIn.AtEndOfStream
	sLine = WScript.StdIn.ReadLine
	If Right(sLine, 4) = " [A]" Then
		WScript.StdOut.WriteLine Split(sLine, " ")(3)
	End If
Loop

로 스크립트를 만들어서 xxx.vbs 파일로 저장 후

cscript xxx.vbs < file.txt > output.txt 로 실행.

참고로 아래는 JScript 버전의 코드.

var line;
while(!WScript.StdIn.AtEndOfStream) {
	line = WScript.StdIn.ReadLine();
	if(line.substr(-4) == ' [A]') {
		WScript.StdOut.WriteLine(line.split(' ')[3]);
	}
}
mokomoji의 이미지

그리고 이런 질문은 게이버 지식인을 이용 하면 헐씬 많은
cmd 코드를 받으실 수 있었겠습니다.

@echo off
setlocal
cd /d "%~dp0">output.txt
for /f "tokens=4 delims= " %%f in ('type data.txt^|findstr /ire ".\[a\]"') do (
echo %%f>>output.txt
)
endlocal
pause

-_-;;

댓글 달기

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