![지정된 줄을 기반으로 두 파일을 병합합니다.](https://linux55.com/image/139053/%EC%A7%80%EC%A0%95%EB%90%9C%20%EC%A4%84%EC%9D%84%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%EB%91%90%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B3%91%ED%95%A9%ED%95%A9%EB%8B%88%EB%8B%A4..png)
나는 가지고있다파일 1.txt다음과 같습니다.
search
http://google.com
mail
https://gmail.com
파일 2.txt다음과 같습니다.
This is a search tool
This is your mail account
이런 식으로 병합해야합니다파일 1.txt다음과 같이 보일 것입니다 :
This is a search tool
http://google.com
This is your mail account
https://gmail.com
답변1
또한 시도
awk '
NR == FNR {T[$0]
next
}
{for (t in T) if (t ~ $1) $1 = t
}
1
' file2 file1
This is a search tool
http://google.com
This is your mail account
https://gmail.com
답변2
사용 awk
:
awk 'NR==FNR{ (NR%2? keyword=$0: seen[keyword]=$0 ); next}
{ for (keys in seen)if ($0 ~ keys) {print $0, seen[keys] }
}' OFS='\n' file1 file2
출력은 다음과 같습니다
This is a search tool
http://google.com
This is your mail account
https://gmail.com
설명하다:
첫 번째 파일 NR==FNR
이고 레코드/줄 번호가 NR%2
전체 $0
줄을 else라는 변수에 저장하는 경우 해당 줄을 찾은 키를 index로 사용하여 이름이 지정된 연관 배열에 추가한 keyword
다음 해당 줄을 읽습니다.seen
next
...첫 번째 파일이 계속되면 for-loop
배열을 반복합니다.본변수는 keys
배열의 인덱스 요소를 가리키는 데 사용되며 요소가 keys
해당 행에서 일치할 수 있는지 확인한 file2
다음 print $0
해당 키 값을 seen[keys]
ewline으로 구분합니다 \n
.