첫 번째 파일의 키 순서를 유지하고 누락된 값을 문자열 "null"로 채우면서 두 파일을 연결합니다.

첫 번째 파일의 키 순서를 유지하고 누락된 값을 문자열 "null"로 채우면서 두 파일을 연결합니다.

두 개의 파일이 있습니다 file1. file2참여하고 싶지만 문자열 "null"을 삽입하려는 두 번째 파일에 일부 필드가 누락되어 있습니다. 한 가지 요구 사항은 키가 와 동일한 순서로 되어 있어야 한다는 것입니다 file1.

입력 파일과 예상 출력은 다음과 같습니다.

file1.txt    file2.txt
a 7 nah      a anau
b 0 blah     c bau
c 5 bah      d cau
d 1 gah
e 0 hah

예상 출력:

a 7 nah anau
b 0 blah null
c 5 bah bau
d 1 gah cau
e 0 hah null

답변1

join+sort해결책:

join -o1.1,1.2,1.3,2.2 -a1 -e"null" <(sort file1.txt) <(sort file2.txt)

산출:

a 7 nah anau
b 0 blah null
c 5 bah bau
d 1 gah cau
e 0 hah null

답변2

솔루션 용도 join:

join file1.txt file2.txt -e null -o auto -a 1 2>/dev/null

매뉴얼 페이지에는 명확하지 않지만 이 -e옵션은 -o.

답변3

를 이용해서 해결할 수 있었습니다 awk. 예제에 표시된 것처럼 내 데이터에서 두 번째 필드는 file1.txt0이어야 하며 그렇지 않으면 손실된다는 것을 알았습니다 file2.txt. 이것이 도움이 됩니다. 스크립트는 다음과 같습니다.

NR==FNR {
  a[$1]=$2;next
}

$2!=0{
  print $0,a[$1]
}

$2==0{
  print $0,"null"
}

옮기다:

awk -f merge.awk file2.txt file1.txt

관련 정보