특정 줄의 특정 위치에 있는 단어를 새 파일로 인쇄하는 스크립트

특정 줄의 특정 위치에 있는 단어를 새 파일로 인쇄하는 스크립트

아래는 특정 라인과 특정 위치에서 데이터를 복사해야 하는 파일입니다.

 CP        I  ({010010010010010010010010010010}000 000)  234764-CTS_fsdfs_a_inv_33ghf/ZN
 ---       I  ({111100011111100000000000011100}111 111)  2518255-
 Q         O  ({001111100011111100000000000011}111 **1**11)  2520618-
 
  AP        I  ({010010010010010010010010010010}010 010)  23499764-fdsf_ccl_a_inv_3330gg/XX
 ---       I  ({111111111111111111111100000011}000 000)  2518255-
 Q         O  ({011111110011111111111111100000}000 **0**00)  2909918-

 QP        I  ({110010010010010010010010010010}010 010)  234764-ZZZ_ccl_a_inv_33305/ZZ
 ---       I  ({111111111111111111111100000011}000 000)  2518255-
 Q         O  ({011111111111111111111111100000}000 **1**11)  2599918-

참고: **는 원본 파일에는 없으며 새 파일에 인쇄할 번호를 식별하는 데 도움이 될 뿐입니다.

Q행의 굵은 글자만 인쇄해야 합니다. 내용을 한 줄씩 새 파일에 저장합니다. $3과 함께 awk 명령을 사용하는 동안 아래와 같은 오류가 발생하므로 $3 유형 명령이 없는 코드를 제안해 주십시오.

can't read "3": no such variable

도움을 주셔서 감사합니다

답변1

다음과 같이 시도해 볼 수 있습니다.

awk '$1=="Q"{split($4,a,""); print a[1]}' input_file >new_file

아이디어는 split자체 요소의 각 문자에 대해 null 구분 기호를 사용하는 것입니다.

또한 제안한대로 사용할 수 있습니다

awk '$1=="Q"{print substr($4,1,1)}' input_file >new_file

답변2

행 중 어느 것도 초기 공백이 없다고 가정하고 (질문의 행은 처음에 다양한 양의 공백이있는 것 같지만 실수로 복사하여 붙여 넣기 때문이라고 가정합니다) 형식이 다음과 같이 수정되었습니다. 필드 너비 등을 고려하여:

$ cut -c 1,2,51 file | sed -n 's/^Q //p'
1
0
1

그러면 각 줄에서 처음 두 문자와 51번째 문자가 추출됩니다. 처음 두 문자는 sed출력할 줄을 결정하는 데 사용됩니다(처음 두 문자를 제거한 후). 문자 51이 찾고 있는 숫자입니다.

또는 (아마도 더 간단할 수도 있음) grep및 다음을 사용하십시오 cut.

$ grep '^Q ' file | cut -c 51
1
0
1

여기서는 을 사용하여 흥미로운 행을 추출한 grep다음 를 사용하여 각 행의 51번째 문자를 추출합니다 cut. 다시 말하지만, 이는 파일 형식에 고정 너비 필드가 있고 초기 공백이 없는 경우에만 작동합니다.

관련 정보