윈도우 배치파일에서 awk와 비슷한 명령어가 있을까요?
안녕하세요.
쉘 스크립트에서 윈도우 배치파일로 바꾸던 중 비슷한 명령이 없어 질문을 드리게 되었습니다.
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
참고해보세요. cygwin 에서 awk가 되네요.
올려주신 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.txt9번째 값이 [A] 인것만 출력 awk 'BEGIN {FS=" "} { if($9 == "[A]"){print $4} }' who.txt----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
답변 감사드립니다.
그런데 gawk를 쓰지 않고는 불가능할까요?
회사 내 어떤 컴퓨터에서나 바로 사용할 수 있게 하는 것이 목적입니다.
웹에서도 가능할겁니다.
- 자바스크립트
- 플래시
- PHP
- C 언어
여러가지 방법이 있겠네요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
...
생각보다 오래걸리고 멈추네요.
...
파일이 없을 경우도 대비해야 하겠습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
마지막 토큰을 확인하는 방법은 모르겠지만,9번째
마지막 토큰을 확인하는 방법은 모르겠지만,
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그런 용도라면 배치 파일이 아닌 VBScript를 쓰셔야 합니다.
배치 파일의 문법으로는 한계가 있습니다.
VBScript 혹은 JScript를 이용해 Windows Script Host로 돌아가는 스크립트를 만드세요.
로 스크립트를 만들어서 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]); } }http://cafe.daum.net/codeinside
그런 용도라면 cmd를 쓰셔야 합니다.
그리고 이런 질문은 게이버 지식인을 이용 하면 헐씬 많은
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-_-;;
댓글 달기