두 목록을 일치시키고 부울 열을 만듭니다.

두 목록을 일치시키고 부울 열을 만듭니다.

두 개의 목록이 있는데 첫 번째 목록에는 모든 이름이 포함되어 있습니다.

$ cat file1.txt
dog_02
dog_01
dog_20
dog_22
dog_23
dog_24

내 두 번째 목록에는 첫 번째 목록의 이름이 있습니다.

$ cat file2.txt
dog_01
dog_23
dog_24

두 목록을 페어링하여 부울 출력을 얻고 싶습니다.

dog_02 
dog_01 dog_01
dog_20
dog_22
dog_23 dog_23
dog_24 dog_24

if (비어 있음) {print "0"} else {print "1"} ;Complete> boolean_output.txt

$ cat boolean_output.txt

dog_02   0
dog_01   1
dog_20   0
dog_22   0
dog_23   1
dog_24   1

시간 내 주셔서 감사합니다

답변1

awk해결책:

awk 'NR==FNR{ a[$1]; next }{ printf "%s\t%d\n",$1,($1 in a) }' file2.txt file1.txt > boolean_output.txt
  • { a[$1]; next }- 첫 번째 입력 파일의 모든 값을 캡처합니다.file2.txt
  • ($1 in a)- 매칭키 조건 확인이름두 번째 입력 파일을 처리할 때file1.txt

최종 boolean_output.txt콘텐츠:

dog_02  0
dog_01  1
dog_20  0
dog_22  0
dog_23  1
dog_24  1

답변2

~처럼로만 페레크레스트의 답변하지만 다른 방식으로 생성됩니다.0이름의 경우 file2에서만 고유하고 입력되는 파일의 순서와 무관하므로 awk고유한 이름을 지정하는 것이 목적인 N 입력 파일에 대해 작동합니다.0그리고 복제의 결과는1의미는.

awk '{s[$1]=s[$1]?"1":"0"} END{for (x in s) print x,s[x]}' file*

관련 정보