특정 요소를 찾으려면 Grep을 사용하세요.

특정 요소를 찾으려면 Grep을 사용하세요.

나는 끈적 끈적한 상황에 갇혀 있습니다. 내용이 다음과 같은 파일이 있습니다.

3               2017-05-30      2017-09-29
2               2017-05-27      2017-08-26
1               2017-05-27      2017-08-26

이제 사용자는 열 1의 값이 될 labelNum을 선택하여 날짜를 수정하도록 선택합니다. 프롬프트에 따라 사용자가 3을 입력하면. 2열을 인쇄하고 싶습니다.

그래서 제가 썼습니다.

cat temp.txt | grep $labelNum | awk '{print $2}'

3 이면 labelNum내가 얻는 출력은 다음과 같습니다.2017-05-30

그러나 사용자가 labelNum2를 입력하면 다음과 같은 결과를 얻습니다.

2017-05-30
2017-05-27
2017-05-27

.txt 파일의 모든 곳에서 "2"를 찾고 있기 때문입니다. 그러나 나는 열 2가 2가 되기를 원합니다 labelNum.2017-05-27

이를 수행할 수 있는 방법이 있습니까? grep 대신 awk를 사용해 보았지만 성공하지 못했습니다.

감사해요.

편집: 행은 동적이며 더 많은 항목이 텍스트 파일에 추가됨에 따라 변경될 수 있습니다. 따라서 sed를 사용하여 해당 라인으로 이동할 수는 없습니다.

답변1

싱글로:

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum- 변수 값을 labelNumawk 스크립트에 전달

  • $1 == lbl- 첫 번째 열 값이 변수 값과 같은 경우 - 다음 식을 실행합니다.

답변2

솔루션을 유지할 수도 있습니다.

cat temp.txt | grep ^$labelNum | awk '{print $2}'

줄의 시작 부분에서 일치합니다. 또는

awk '/^'$labelNum'/{print $2}' temp.txt

비슷하게 작동하지만 awk 내부에서 탈출하는 것은 까다롭습니다.

관련 정보