전체 텍스트 줄을 표시하는 방법은 무엇입니까?

전체 텍스트 줄을 표시하는 방법은 무엇입니까?

내 정보의 예:

Fruit,Quantity:Cost,Sold
Red Apple,10,1,5
Green Apple,10,2,20
Orange,20,1,10

이것은 내 코드입니다.

if      [ "$fruit != $blank" ] && [ "$quantity" == "$blank" ]; then
        cut -d\, -f1 information.txt | grep $fruit
elif    [ "$quantity != $blank" ] && [ "$fruit" == "$blank" ]; then
        cut -d\, -f2 information.txt | grep $quantity 

내 코드는 원하는 검색만 표시하므로 "사과"를 입력하면 "빨간 사과"와 "녹색 사과"만 표시되고 수량은 표시되지 않습니다. 모든 정보를 표시하려면 어떻게 해야 합니까? 수량과 동일하게 "20"을 입력하면 "20"만 표시됩니다.

답변1

귀하 cut가 제공한 입력에서 찾고 있는 정보를 효과적으로 제거하고 있습니다 grep. 만 사용

grep "^[^,]*$fruit[^,]*" information.txt

바꾸다

cut -d\, -f1 information.txt | grep $fruit

그리고

grep "^[^,]*,$quantity$" information.txt

바꾸다

cut -d\, -f2 information.txt | grep $quantity

관심 있는 행을 필터링하세요. 정규식:

  • ^줄의 처음부터 일치합니다.

  • [^,]*,쉼표( )를 포함하지 않는 모든 문자열과 일치합니다 .

  • $fruit환경 변수에 포함된 문자열을 일치시킵니다 fruit.

  • [^,]*이 시점에서 또 다른 하나가 분명해져야 합니다.

데이터에 더 많은 필드를 추가하면 정규식을 수정해야 할 수도 있습니다. 이 경우 이에 대한 튜토리얼이 도움이 될 것입니다. 구문은 grep(1)매뉴얼 페이지에 있습니다(예: man grep: 사용).

주장 cut하고 입력 내용이 정렬된 경우 다음을 사용하여 정보를 다시 넣을 수 있습니다 join(첫 번째 경우).

inf=information.txt
cut -d, -f1 $inf | grep "$fruit" | sort -u | join -t, -j 1 - $inf
  • cut-f1이름이 환경 변수( )에 포함된 파일의 첫 번째 필드를 출력합니다. inf여기서 필드는 -d,쉼표( )로 구분됩니다.

  • grep찾다;

  • sort중복 항목 정렬 및 제거( -u);

  • join표준 입력( -마지막 인수 옆의 in)의 행을 마지막 인수로 제공된 파일의 내용과 연결합니다. 쉼표를 필드 구분 기호( )로 사용 -t,하고 동일한 첫 번째 필드( -j 1)가 있는 행을 연결합니다.

데이터 정렬에 대한 요구 사항은 join(coreutils 패키지에 있는 하나 이상)에서 발생합니다. 정렬되지 않은 데이터가 얼마나 많은 문제가 있는지 확인하지 않았습니다.

관련 정보