programing tip

Awk 명령 줄을 사용하여 쉼표로 구분 된 열 인쇄

itbloger 2021. 1. 10. 16:56
반응형

Awk 명령 줄을 사용하여 쉼표로 구분 된 열 인쇄


여기에 문제가 있습니다. awk를 사용하여 텍스트 파일의 열을 인쇄해야합니다. 그러나 열은 공백으로 구분되지 않고 하나의 쉼표 만 사용합니다. 다음과 같이 보입니다.

column1,column2,column3,column4,column5,column6

awk를 사용하여 세 번째 열을 어떻게 인쇄합니까?


시험:

awk -F',' '{print $3}' myfile.txt

여기 -F에서 ","를 필드 구분자로 사용하는 awk에게 말하고 있습니다.


유일한 요구 사항이 모든 줄의 세 번째 필드를 쉼표로 구분하여 인쇄하는 것이라면 cut을 사용할 수 있습니다.

cut -d, -f3 file
  • -d, 구분 기호를 쉼표로 설정
  • -f3 세 번째 필드 만 인쇄되도록 지정합니다.

이 시도 awk

awk -F, '{$0=$3}1' file
column3
  • , 필드를 다음으로 나누기 ,
  • $0=$3 행을 필드로만 설정 3
  • 1모두 인쇄하십시오. ( 여기에 설명 )

다음과 같이 사용할 수도 있습니다.

awk -F, '{print $3}' file

간단하지만 에서 없는 솔루션 :

while IFS=, read -r a a a b; do echo "$a"; done <inputfile

그것은 작은 파일을 빠르게 작동합니다 (<100 줄) 다음 가 (고가의 호출을 피 적은 리소스를 사용하므로 forkexecve시스템 호출).

Ed Morton의 편집 (답을 가로 채서 죄송합니다.이 문제를 해결하는 더 좋은 방법이 있는지 모르겠습니다) :

셸이 작은 파일의 경우 awk보다 빠르게 실행된다는 신화를 숨기려면 :

$ wc -l file
99 file

$ time while IFS=, read -r a a a b; do echo "$a"; done <file >/dev/null

real    0m0.016s
user    0m0.000s
sys     0m0.015s

$ time awk -F, '{print $3}' file >/dev/null

real    0m0.016s
user    0m0.000s
sys     0m0.015s

정말 작은 파일을 얻으면 awk 스크립트보다 눈 깜짝 할 사이에 쉘 스크립트가 실행되는 것을 볼 수 있지만 누가 신경 쓰나요?

awk 스크립트보다 강력한 셸 스크립트를 작성하는 것이 더 어렵다고 생각하지 않는다면 게시 한 셸 스크립트에서이 버그를 살펴보세요.

$ cat file
a,b,-e,d
$ cut -d, -f3 file
-e
$ awk -F, '{print $3}' file
-e
$ while IFS=, read -r a a a b; do echo "$a"; done <file

$

참조 URL : https://stackoverflow.com/questions/26842504/printing-column-separated-by-comma-using-awk-command-line

반응형