첫 번째 파일의 샘플 데이터 first.txt
는 다음과 같습니다.
10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.3,Web Server,comments4,httpd is latest version,myappcode15
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11
.....
견본second.txt
whatever,10.0.0.1,Web Server,date,whatever,here is JBOSS on the server,myappcode1
watever1,whatever2,10.0.0.3,here is App server,comments4,myapp17,myappcode15
whatever,10.0.0.7,check for test_WebLogic_version version,comments5,date,myappcode2
whatever,whatever,10.0.0.13,App Server,here is JBOSS,myapp17,myappcode15
whatever,whatever,whatever,10.0.0.12,Web Server,here on_windows is the latest version,whatever,
.....
필요하다:
first.txt
1열의 첫 번째 단어와 4번째 열의 행에 존재하는지 확인해야 합니다.second.txt
그러므로third.txt
10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
.....
Third.txt에는 다음 두 가지 항목이 포함되어서는 안 됩니다.
10.0.0.13,App Server,comments4,jboss is old version,myappcode15 ----> `httpd` did not match `here is App server`
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11 ----> `10.0.0.2` did not match `10.0.0.12`
내가 아는 것은 다음과 같지만 깔끔하게 정리할 수는 없습니다.
first.txt의 첫 번째 및 네 번째 열에서 첫 번째 단어를 가져옵니다.
cat first.txt | cut -d, -f1
---> 첫 번째 열을 제공합니다.cat first.txt | cut -d, -f4 | awk 'NR==1{print $1}'
---> 네 번째 열의 첫 번째 단어를 가져옵니다.Grep은 Second.txt의 열 1과 4에서 첫 번째 단어를 찾습니다.
cat second.txt | grep -w <first column> | grep -i 'first word of fourth column'
--->여기서 도움이 필요합니다
뭔가 제안해주실 수 있나요?
답변1
다음은 awk 스크립트입니다.
awk -F, 'FNR==NR {
row[tolower($0)]
next
}
{
split($4,arr," ")
for (r in row) {
if (r ~ tolower($1 FS) && r ~ tolower(arr[1])) {
print
next
}
}
}' second.txt first.txt
산출:
10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
second.txt
행을 "행" 연관 배열에 키로 저장한 다음 행 을 구문 분석 first.txt
하고 선택한 필드를 "행"으로 테스트합니다. tolower()
대소문자 일치 무시를 구현하는 데 사용됩니다.
노트:첫 번째 일치 패턴이 더 이상 IP 단독이 아니도록 위의 내용을 수정했습니다. 즉 $1 FS
, IP 뒤에 쉼표가 있음을 의미합니다. 두 파일 모두에 해당되기 때문입니다. 그것이 없으면 10.0.0.1
for 10.0.0.13
또는 이와 유사한 것도 일치합니다.