grep, sed, awk 또는 기타 Linux 도구를 사용하여 파일의 각 줄에서 "\t$month\t$day\n" 시퀀스를 검색하려면 어떻게 해야 합니까?

grep, sed, awk 또는 기타 Linux 도구를 사용하여 파일의 각 줄에서 "\t$month\t$day\n" 시퀀스를 검색하려면 어떻게 해야 합니까?

grep, sed, awk 또는 기타 Linux 도구나 bash 스크립트를 사용하여 파일의 각 줄에서 "\t$month\t$day\n" 시퀀스를 검색하는 방법...

\t = tab  
\n = new line  
$month = Sep   #$month is a variable with the content “Sep”  
$day = 4       #$day is a variable with the content “4”? 

grep을 사용하면 각각 \t, \n, $month 및 $day를 찾을 수 있지만 잘못된 긍정을 줄이기 위해 도구가 모든 줄에서 "\t$month\t" $day\n" 조합을 검색하도록 하고 싶습니다. 일치하면 해당 행을 표준 출력, 즉 콘솔로 보냅니다.

"\t$month\t$day\n" 조합에 대해 파일의 각 줄을 검색하고 도구가 일치하는 각 줄을 콘솔에 출력하도록 하려면 어떻게 해야 합니까?

예: 다음은 "start-with-core" 파일의 내용입니다.

$ cat start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

첫 번째 필드(열) 뒤에는 탭 문자가 있고, 두 번째 필드 뒤에는 탭 문자가 있으며, 세 번째 필드 뒤에는 줄 바꿈 문자가 있습니다.

$ echo $month  
Sep  
                                                                             
$ echo $day    
4  

$ grep $'\n'  start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

$ grep $'\t'  start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

$ grep "$month"  start-with-core  
core4321        Sep     3  
core4   Sep     4  
core10  Sep     4  
core44  Sep     2  
core400 Sep     3  

$ grep "$day" start-with-core
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

어떤 아이디어가 있나요? 감사해요! 학생

///\\

답변1

grep패턴과 일치하는 행을 찾으면 일치하는 행을 찾고 싶은 것 같습니다.존재하다 \t$month\t$day.

그래서:

TAB=$(printf '\t') # or TAB=$'\t' with many shells
grep "$TAB$month$TAB$day\$" < your-file

여기서 $(대부분의 쉘에서는 이스케이프 없이 따르는 것이 안전하더라도 쉘이 인수 확장을 위해 이를 사용하기 때문에 여기에서 이스케이프됨 ")는 주제의 끝과 일치합니다.

awk표 형식 데이터 처리에 적합합니다. 이를 사용하여 행을 마지막 필드 $day및 마지막에서 두 번째 필드 와 일치시킬 수 있습니다 $month.

M=$month D=$day awk -F '\t' '
  $NF == ENVIRON["M"] && $(NF-1) == ENVIRON["D"]
  ' < your-file

awk==두 피연산자가 모두 숫자처럼 보이고 여기처럼 명시적으로 문자열로 입력되지 않은 경우 숫자 비교가 수행되므로 일치 Sep 4하지만 Sep 04// 4.0...4e0

관련 정보