두 개의 목록이 있는데 첫 번째 목록에는 모든 이름이 포함되어 있습니다.
$ 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*