특정 요소에 대한 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'를 찾고 있기 때문입니다. 그러나 나는 labelNum2 에 ​​대한 열 2를 원합니다 .2017-05-27

이를 수행할 수 있는 방법이 있습니까? grep을 대체하기 위해 awk를 사용해 보았지만 운이 없었습니다.

감사해요.

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

답변1

싱글로:

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

  • -v lbl=$labelNumlabelNum- awk 스크립트에 변수 값 전달

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

답변2

또한 솔루션 주위에 머물 수도 있습니다.

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

줄의 시작 부분과 일치하거나

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

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

관련 정보