**$&*#@**
필드 구분 기호와 레코드 구분 기호가 있는 **$#@&***
암시적 파일이 있습니다. 아래는 그 예입니다.
100$&*#@200$&*#@50$&*#@Some String$&*#@2016-01-01 101010$#@&*101$&*#@210$&*#@51$&*#@Some String$&*#@2016-02-02 101010$#@&*102$&*#@220$&*#@55$&*#@Some String$&*#@2016-03-03 101010$#@&*
데이터 유효성 검사를 위해 위 파일에서 첫 번째 행을 추출하려면 몇 가지 명령이 필요합니다.
이 경우 wc -l
연속 스트림(암시적 파일)이므로 0이 반환되므로 head -1을 사용할 수 없습니다.
또한 각 필드를 추출하고 처음 세 필드가 정수인지, 특정 숫자 필드가 특정 형식의 타임스탬프인지 확인해야 합니다.
답변1
귀하의 예제를 저장하기 위해 라는 변수를 사용했습니다 string
. 다음은 구분된 필드가 있는 줄로 sed
구분됩니다 . 이것을 파이프로 연결하여 첫 번째 행을 얻을 수 있습니다.string
:
head -1
echo $string | sed 's/'"$#@&\*"'/\n/g'| sed 's/'"$&\*#@"'/:/g'
cut
그런 다음 각 행의 처음 세 필드를 가져와서 해당 필드가 숫자인지 확인할 수 있습니다. 첫 번째 필드 테스트의 예:
field1="$(echo $new_string | cut -d: -f1 | head -1)"
if [ "$field1" -eq "$field1" ] 2>/dev/null; then
echo "Integer.
else
echo "Not integer."
fi
루프를 사용하여 모든 값을 구문 분석하고 유효성을 검사할 수 있습니다. 테스트 날짜는 더 복잡할 수 있지만 정규식 등을 사용하여 실행 가능합니다.