2012-06-25 5 views
0

다음 awk 문이 예상대로 작동합니다. 텍스트 파일에서 1, 2 및 4 열을 |텍스트 문자열의 중간을 반환

awk '{print $1,"|", $2,"|", $(NF-3), "|",$(NF-2), "|", $(NF-1),"|", $(NF)}' 

나는 가운데 열을 반환하고 싶습니다. 다른 말로하면 다음 줄의 $를 뭔가 효과가있는 것으로 바꾸어야합니다.

awk '{print $1, $2, $something, $(NF-3), $(NF-2) $(NF-1), $(NF)}' 

무언가 변수를 대체 할 3 ~ 11 개의 열이있을 수 있습니다.

+0

못해서 죄송합니다. 'awk'{print $ 1, $ 2, $ 3, $ (NF-3), $ (NF-1), $ (NF)} '또는'awk'{print $ 1, $ 2 , $ 4, $ (NF-3), $ (NF-2) $ (NF-1), $ (NF)} ' – anubhava

+0

파일을 | 구분 기호는 7 열입니다. – shantanuo

+0

다음과 같이 사용할 수 있습니다 :''{printf ("% s | % s | % s | % s | % s | % s | % s | % s \ n", $ 1, $ 2, $ 3, $ (NF-3) , $ (NF-2) $ (NF-1), $ (NF);} '' – anubhava

답변

1

나는 당신이 당신의 출력이 어떻게 생겼는지를 이해하고 있다고 생각합니다. awk이 라인을 시도해보십시오

awk 'BEGIN { OFS="|" } { for (i=1; i<=NF; i++) if (i <= 3 || i >= NF - 3) printf "%s"OFS, $i; else printf "%s", $i; print "" }' file.txt 

테스트 입력 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 
Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 
101 102 103 104 1010 1011 1012 1013 1014 

시험 출력 :

1|2|3|4567891011|12|13|14 
X1|X2|X3|X4X5X6X7X8X9X10X11|X12|X13|X14 
Y1|Y2|Y3|Y4Y5Y6Y7Y8Y9Y10Y11|Y12|Y13|Y14 
101|102|103|10410101011|1012|1013|1014 

HTH

+0

매우 가까운 # 테스트 입력은 공백으로 구분되며 | 분리 된 # 테스트 출력은 네 번째 열에 공백이있을 수 있습니다. – shantanuo

+0

@shantanuo, 샘플 데이터를 게시 해보십시오. 네 번째 칼럼에서 그 공간을 어디에서 기대하십니까? – Steve

+0

길다란 대안 대신에'if (i <= 3 || i > = NF - 3)' –

관련 문제