아래는 특정 라인과 특정 위치에서 데이터를 복사해야 하는 파일입니다.
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
. 다시 말하지만, 이는 파일 형식에 고정 너비 필드가 있고 초기 공백이 없는 경우에만 작동합니다.