파일이 탭으로 구분되어 있고 8개의 열이 있는지 확인하는 방법은 무엇입니까?

파일이 탭으로 구분되어 있고 8개의 열이 있는지 확인하는 방법은 무엇입니까?

텍스트 파일에서 두 가지를 확인해야 합니다.

  1. 탭으로 구분된 경우
  2. 정확히 8개의 열이 있는 경우

이를 확인하고 그 중 하나가 거짓인 경우 오류 메시지를 표시하려면 어떻게 해야 합니까?

답변1

한 가지 해결책은 awk를 사용하는 것입니다.

awk -F "\t" 'NF != 8' data.txt

이 명령은 8개 필드를 포함하지 않는 data.txt 파일의 해당 행을 인쇄합니다.

답변2

다음과 같이 Perl oneliner를 사용할 수 있습니다.

perl -ne '(s/\t//go)==7 or die "Not tabdelimitedand 8-columned"' t.txt

파일이 일치하지 않으면 오류 메시지와 함께 종료됩니다. 추가 (bash) 스크립팅을 허용합니다.

if perl -ne '(s/\t//go)==7 or exit -1' t.txt
then
    echo correct format
else
    echo unexpected format
fi

답변3

ct=($(sed -re 's/[^\t]//g' "$file" | expand -t1 | wc -l -c -L))

if (( ((ct[0] * 8) == ct[1]) && (ct[2] == 7) )) ;then
    echo "file contains 8 tab-delimited fields on every line"
else 
    if (( ct[1] == ct[0] )) ;then
        echo "file does not contain any tab-delimiters"
    else
        echo "file contains tabs, but does not have 8 fields on every line"
    fi
fi

관련 정보