1.txt

1.txt

이게 내 파일 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이로 인해 유틸리티가 출력에 탭 문자를 사용하게 됩니다.

관련 정보