나는 끈적 끈적한 상황에 갇혀 있습니다. 내용이 다음과 같은 파일이 있습니다.
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
그러나 사용자가 labelNum
2를 입력하면 다음과 같은 결과를 얻습니다.
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
- 변수 값을labelNum
awk 스크립트에 전달$1 == lbl
- 첫 번째 열 값이 변수 값과 같은 경우 - 다음 식을 실행합니다.
답변2
솔루션을 유지할 수도 있습니다.
cat temp.txt | grep ^$labelNum | awk '{print $2}'
줄의 시작 부분에서 일치합니다. 또는
awk '/^'$labelNum'/{print $2}' temp.txt
비슷하게 작동하지만 awk 내부에서 탈출하는 것은 까다롭습니다.