awk 스크립트 실행 후 문자열 잘림

Nov 23 2020

이 코드가 있습니다

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

이런 식으로 코드를 사용합니다

awk -f tst.awk 2.txt 1.txt

두 개의 텍스트 파일이 있습니다

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

3 개의 .txt 출력 을 생성하려고합니다.

AA;BB;CC;DD;

하지만이 스크립트는이 스크립트가 AA;BB;

논리 : 위는 배열 인덱스의 해시 조회에서 리터럴 문자열을 사용하므로 입력에 어떤 문자가 있는지는 신경 쓰지 않습니다. 그러나 샘플 출력에 대해 :
의 경우 2 일반 필드에서도있다 .txt 인 1 예 .txt.for BB;AA;당신은, 즉 하나의 연속을 연결할 필요가 AA;BB;CC;DD;출력 인 경우 주문이 관련이 없습니다 예를 들어, 필요하지 않은 BB;AA;DD;CC;
경우에만 조건 중복을 피하는 것이 필요하지만 내 스크립트는 이미 이것을 수행합니다.

답변

1 RavinderSingh13 Nov 23 2020 at 08:33

OP의 주석에 따라 두 파일에 모두 한 줄만 있습니다. 따라서 paste명령을 사용하여 두 파일을 결합한 다음 awk명령 으로 출력을 처리합니다 .

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'