의사 명령
perl -pe 'g/^[1-777])/g' data.txt
줄 시작 부분의 모든 숫자 뒤에 ")" 등을 1)
추가해 보았습니다 .67)
777)
모든 질문 번호 1)
에 대한 데이터를 찾아야 합니다(등, ...그러나 그렇지 않음)16)
68)
16.
778)
1) hello
A) Options here which should be not matched.
16) hello 16. old
A) Options here which should be not matched.
68) yes question
A) Options here which should be not matched.
...
582) hurray
A) Options here which should be not matched.
778)
A) Options here which should be not matched.
777 이전의 숫자만 찾습니다.
원하는 출력
1,16,68,582,777
그런 다음 이를 Sed 명령에 공급할 수 있습니다. 마지막으로 가능하다면 이 명령의 결과를 반환합니다(쉼표로 구분): sed -n '1,4,582' full_data.txt
, 토론여기, Perl에서 sed로의 일종의 파이프입니까, 아니면 그냥 Perl에 있습니까?
줄의 시작 부분부터 모든 숫자를 반환하는 방법은 무엇입니까?
답변1
일부 명확한 반복에서 알 수 있듯이 777보다 크지 않은 값을 가진 정수만 쉼표로 구분된 목록으로 수집되어야 합니다. 여기 있습니다:
awk -F ')' '$1~/^[0-9]+$/ && $1<=777 {print $1}' <datafile | paste -sd,
참고: 정수 범위를 일치시키려면 다음과 같이 awk
작성할 수도 있습니다.
awk -F ')' '$1>=1 && $1<=777 {print $1}' <datafile | paste -sd,
아래 변형을 관련 작업의 구성 요소로 유지합니다.
만들다모든 문제 번호:
cut -d ')' -f1 <datafile | paste -sd,
다음과 같은 출력이 생성됩니다.
1,2,3,...,582
또는 항목에 다음이 있는 경우빈 대답(예: 777)은 고려하면 안 됩니다.
awk -F ') ?' '$2!="" {print $1}' <datafile | paste -sd,
또는 다음이 있는 경우수치적 한계777 다음을 고려하십시오:
awk -F ')' '$1<=777 {print $1}' <datafile | paste -sd,
아니면 일치만정수첫 번째 필드에서:
awk -F ')' '$1~/^[0-9]+$/ {print $1}' <datafile | paste -sd,
답변2
먼저 후보자를 추출한 다음 최대 777을 확인합니다.
egrep '^[0-7]?[0-9][0-9]?)' file | sed 's/^\([0-7]\?[0-9][0-9]\?\))/\1 )/' | awk '($1 < 778) {print $0}' | sed 's/^\([0-7]\?[0-9][0-9]\?\) ).*/\1,/' | tr --delete \\n | sed 's/,$/\n/'
내 테스트 파일에서 작동합니다. (편집 1: 마지막 sed는 이제 숫자만 제공합니다 편집 2: 후행 제거 ,
)