2017-04-24 2 views
1

awk 명령을 사용하여 .dat 파일을 .csv 파일로 변경하려고합니다. 파일명은 X가 몇 백 1에서 어떤 번호가 filenameX.project.dat로 편성되어awk 명령을 사용하여 한 번에 여러 파일의 파일 형식 변경

23.00005 320.0054 0.0039734            
xx.xxxxx xxx.xxxx x.xxxxxxx 

: 예 파일은 각 열 사이의 공간으로 번호 3 열을 갖는다. 폴더에는 변경하지 않으려는 다른 많은 파일이 있습니다. 나는이 파일들을 계속해서 여러 번 반복 할 필요없이 한번에 변경할 수 있기를 원합니다. 여기

내 예제 명령입니다 :

awk '{print $1","$2","$3}' filenameX.project.dat > filenameX.project.csv 

어떻게이 모든 파일 csv 파일 만들 하나 개의 명령을 실행하는 자동화 할 수 있습니다? 나는 아래의 명령과 유사한 것을 시도했지만 아무 것도 작동하지 않는다. 이 같은

awk '{print $1","$2","$3}' filename*.project.dat > filename*.project.csv 
+0

어? 파일 내용이 파일 이름 확장자 변경과 관련이 있습니까? 파일에있는 내용이 파일 이름에 필요한 작업과 관련이 있습니까? –

+0

csv 파일이 쉼표로 열을 구분하는 것으로 인식되기 때문에 '{print $ 1 ","$ 2 ","3} "의 필요성을 설명하기 때문에 내용을 지정했습니다. – walkergt

+0

파일 내용을 전혀 변경하고 싶지 않으십니까? 확장 기능을 변경하기 만하면됩니다. –

답변

0

뭔가 :

$ for i in filename*dat; do awk '{print $1","$2","$3}' "$i" >> $(echo "$i" | sed 's,\.dat$,.csv,'); done 

그것은 디렉토리에있는 모든 filename*dat 파일을 반복, 그들에 awk 명령을 실행하고 마지막에 .csv 대신 .dat이있는 파일로 출력을 리디렉션합니다.

+0

이렇게하면 "bash : 예기치 않은 토큰 'do'근처에 구문 오류가 출력됩니다." – walkergt

+0

처음'$'을 제거하고 프롬프트로 넣습니다. 이 목적을 위해 다른 인기있는 문자는'#','>'등입니다. –

+0

물론! 그건 의미가 있습니다. 도와 줘서 고마워. – walkergt

0

는 당신과 같이 모든 awk이 작업을 수행 할 수 있습니다 난 아직도 당신이 무슨 뜻인지 확실하지 나처럼

awk 'BEGIN {OFS=","} 
    FNR==1 {fn=FILENAME; sub(/\.dat$/,".csv",fn) 
      printf "Copying %s to %s\n", FILENAME, fn} 
    { for (i=1;i<=NF;i++) printf "%s%s", $i, i<NF ? OFS : RS > fn}' *.dat 
0

먼저 백업을하시기 바랍니다하지만 의심 :

rename -n -S .dat .csv filename*.project.dat 

하는 경우 모양이 좋으면 -n을 제거하고 다시 실행하십시오.

관련 문제