awk 인쇄 열

awk 인쇄 열

그래서 데이터를 다른 형식으로 구문 분석해 보았지만 데이터의 마지막 열에 구분 기호가 포함되어 있습니다.

내가 사용하는 경우:

awk -F: {' print $1 "\t" $2 "\t" $3 '}

데이터는 다음과 같습니다

ExampleCol1:ExampleCol2:Ex:am:ple:Col3

나는 단지 다음을 얻습니다:

ExampleCol1    ExampleCol2    Ex

그 후에 나머지 열을 어떻게 잡을 수 있습니까 $2? 그래서 이렇게 :

print $1 "\t" $2 "\t" $(REST OF COLUMNS)

답변1

귀하의 질문을 올바르게 이해했다면 이것이 귀하에게 도움이 될까요?

sed -e 's/:/\t/1' -e 's/:/\t/1' yourFile

처음 두 개의 콜론을 탭으로 바꾸고 나머지를 인쇄합니다.

샘플 데이터를 기반으로 출력은 다음과 같습니다.

ExampleCol1    ExampleCol2    Ex:am:ple:Col3

귀하의 질문에 귀하가 있다고 말했기 때문에 잘 모르겠습니다.

ExampleCol1:ExampleCol2:Ex

제공한 awk 명령을 실행하면 다음과 같은 결과가 나타납니다.

ExampleCol1    ExampleCol2    Ex

답변2

_example='ExampleCol1:ExampleCol2:Ex:am:ple:Col3'

awk -F: '{printf $1 "\t" $2 "\t"} {for(i=3;i<=NF;i++) printf $i "\t"} {print ""}' <<<"${_example}"

...조금 지저분해 보이지만 출력은 됩니다...

ExampleCol1 ExampleCol2 Ex  am  ple Col3

...원하는 것을 표현하는 더 간결한 방법이 있을 것입니다 awk. 예를 들어...

awk -F: '{for(i=1;i<=NF;i++) printf $i "\t"} {print ""}' <<<"$_example"

...하지만 위의 방법을 사용하면 원하는 동작에 더 가까워질 수 있습니다.awk

고쳐 쓰다

아, 그렇다면 두 번째 열 뒤에 콜론이 있어야 할 것 같은데요...

awk -F: '{printf $1 "\t" $2 "\t"} {for(i=3;i<NF;i++) printf $i ":"} {print $NF}' <<<"$_example"

awk...이 질문에 다음과 같이 대답하는 것이 더 정확할 수도 있습니다...

ExampleCol1 ExampleCol2 Ex:am:ple:Col3

답변3

한 가지 방법은 다음과 같습니다.

 $ awk -vOFS="\t" '{
     sub(/:/, OFS)
     sub(/:/, OFS)
 }1' inp

또는 다른 방법으로:

 $ awk '! /:.*:/ || sub(/:/, "\t") && sub(/:/, "\t")' inp

답변4

다음 명령을 사용해보십시오. 훌륭하게 작동합니다.

주문하다

 sed "s/:/ /3g" filename| awk -F ":" '{print $1,$2,$3}'| sed "s/ /:/3g"| awk 'OFS="\t" {print $1,$2,$3}'

산출

ExampleCol1 ExampleCol2 Ex:am:ple:Col3

관련 정보