이게 내 파일 2개야
1.txt
1
2
3
4
5
2.txt
2 a
5 3
내가 받은 파일보다awk -F '\t' 'NR==FNR{F1[$0];next}$1 in F1{print}' 1.txt 2.txt
2 a
5 3
하지만 나는 이런 파일을 얻고 싶다
1
2 a
3
4
5 3
또는
1 0
2 a
3 0
4 0
5 3
답변1
공백을 2.txt
다시 탭으로 변환합니다 sed -i 's/ */\t/' 2.txt
.
awk -F '\t' '
BEGIN{OFS=FS} NR==FNR{F1[$1]=$2; next} {print $1, ($1 in F1)? F1[$1] : 0}
' 2.txt 1.txt
1 0
2 a
3 0
4 0
5 3
답변2
join
대신 사용하십시오 awk
. 두 파일이 모두 첫 번째 필드에 정렬되어 있다고 가정합니다(질문에 있음).
$ join -a 1 1.txt 2.txt
1
2 a
3
4
5 3
이 -a 1
옵션을 사용하면 유틸리티는 첫 번째 필드에 연결된 줄뿐만 아니라 첫 번째 파일의 모든 줄을 보고합니다.
누락된 값을 0으로 추가로 대체하려면 join
특정 필드를 출력하도록 요청하고 누락된 값도 로 대체해야 합니다 0
. -o 1.1,2.2
첫 번째 파일의 첫 번째 필드와 두 번째 파일의 두 번째 필드가 필요하며 누락 -e 0
된 데이터를 다음으로 바꿉니다 0
.
$ join -a 1 -o 1.1,2.2 -e 0 1.txt 2.txt
1 0
2 a
3 0
4 0
5 3
구분 기호를 탭으로 명시적으로 설정하려면 -t $'\t'
with를 사용하세요 . join
이로 인해 유틸리티가 출력에 탭 문자를 사용하게 됩니다.