2016-08-05 2 views
0

하나의 awk 스크립트에 복수 CSVTXT 개의 파일을 처리해야합니다. Windows의 cmd 파일은 다음과 같습니다. gawk -f script.awk *.csv *.txt > output.file 스크립트를 실행할 때마다 명령 프롬프트에 항상 입력하고 싶지 않으므로이 cmd 파일을 사용하고 싶습니다. 다른 파일 형식으로 다른 작업을 수행하고 싶습니다. 내가 if (match(FILENAME, ".csv")) && (FNR > 1) 같은 스크립트 파일 안에 몇 가지 물건을 시도했지만 그들 중 누구도 일하고 ​​있었다. 나는 대략개의 파일과 많은 수의 (1000+ 같은) TXT 파일을 가지고 있으며, 이것들은 모두 입력 파일입니다. CSV 파일의 내용은 동일한 스키마 (따옴표 사이의 한 열)에 모두 있습니다. 예 : 나는 배열로 그 후 따옴표 O를 내가 TXT 파일을 처리하고 싶습니다 /를 처리 할 때 모든 입력 CSV 파일의 첫 번째 줄을 무시하고 w는 각 레코드를 추가 할다른 확장자를 가진 awk 처리 파일

"Player" 
"adigabor" 

하는 내가 잘 할 수있는, 내 문제는 하나의 스크립트에서 다른 입력 파일 확장명으로 다른 작업을 수행 할 수 없다는 것입니다.

답변

1

당신은 우리가 그냥 여기 추측하지만 것 "그들 중 누구도이 작동되지 않았다"어떤 방법으로 우리에게 말했다 어쨌든가는 경우 매우 유용 할 것입니다 :

match(FILENAME, ".csv")에 가장 큰 문제는 그것이 csv 일치하는 것입니다 파일 이름의 임의의 위치에 임의의 char이옵니다.

match(FILENAME,/\.csv$/) 

하지만 당신은 그위한 함수를 호출 할 필요가 없습니다 : 말 그대로 .csv에있는 파일 를 얻으려면 당신이 원하는

:
FILENAME ~ /\.csv$/ 

그래서 스크립트의 모습을
FILENAME ~ /\.csv$/ { 
    if (FNR > 1) { 
     do CSV stuff 
    } 
    next 
} 
{ 
    do TXT stuff 
} 

아직 수행 할 수없는 작업이라면 질문을 편집하여 샘플 입력 파일 (각 .csv 및 .txt 중 하나 이상 포함)을 포함 시키십시오. 파일) 및 예상 출력과 함께 수행하려는 작업에 대한 더 나은 설명이 포함되어 있습니다.

+1

에드, 완벽하게 작동합니다. – sasieightynine

관련 문제