2014-03-12 4 views
1

필자는 255 개의 쉼표로 구분 된 열이있는 상당히 큰 파일을 가지고 있으며 매 세 번째 열만 인쇄해야합니다.파일의 모든 n 번째 열을 인쇄하십시오.

나는이

awk '{ for (i=0;i<=NF;i+=3) print $i }' file 

처럼 뭔가를 시도했지만 그것은 단지 하나의 긴 열을 출력하기 때문에 즉, 해결책이 될 것 같지 않습니다. 아무도 도울 수 있니? 감사합니다.

답변

2

기본적으로 은 공백으로 필드를 분할하기 때문에 작동합니다. 쉼표로 구분하기 위해이를 알려야하고 FS 변수 또는 -F 스위치를 사용하여 완료해야합니다. 게다가 첫 번째 필드는 1 위입니다.

awk -F',' '{ for (i=1;i<=NF;i+=3) print $i }' file 
3

여기 이렇게하는 한 가지 방법은 : 제로 그래서 또한 for 루프의 초기 값을 변경 전체 라인이다.

스크립트 prog.awk :

BEGIN {FS = ","} # field separator 
{for (i = 1; i <= NF; i += 3) printf ("%s%c", $i, i + 3 <= NF ? "," : "\n");} 

호출 :

awk -f prog.awk <input.csv >output.csv 

예 input.csv :

1,2,3,4,5,6,7,8,9,10 
11,12,13,14,15,16,17,18,19,20 

예 output.csv :

1,4,7,10 
11,14,17,20 
+1

39 초 동안 나를 때리는 +1! $ i, (i + 3> NF? "\ n": FS)}''awk -F '{for (i = 1; i = NF; i + – Kent

관련 문제