불다

불다

파이프(|)로 구분된 문자열이 있고 이 파이프로 구분된 문자열의 일곱 번째 열에서 첫 번째 문자를 찾아야 합니다.

AAAAAA|04|XXXXXXX|20170210-163119|||2.0|20170208||

예상 출력: 2

답변1

잘라내기를 사용할 수도 있습니다.

cut -d\| -f7 | cut -c1

답변2

이렇게 하면 작업이 수행됩니다.

awk -F "|" '{print(substr($7,1,1))}' input.file.txt

답변3

불다

IFS='|' read -r -a x <<< "$str"
echo "${x[7]:0:1}"

read이 명령은 $str의 내용을 가져와 char로 분할 pipe |하고 x라는 배열( )에 채웁니다 -a. 그런 다음 7번째 필드의 시작 부분에서 문자를 추출합니다.

진주

perl -F'\|' -pale '($_) = $F[6] =~ /./g' <<< "$str"

-F=> 필드 구분 기호, -p=> 자동 인쇄 모드, -a=> 자동 분할 켜기, => 레코드 구분 기호( )를 -l및 로 설정합니다.RS\nORS\n

7번째 필드는 $F[6]목록 컨텍스트에서 평가되고 /./g단일 문자를 반환합니다. 여기서 첫 번째 문자가 선택되어 저장되므로 $_autoprint가져옵니다 stdout.

표현

sep='|'
fld="[^$sep]*"
fld7=$(yes "$fld$sep" | sed 7q | tr -d '\n')
expr "$str" : "$fld7\(.\)"

expr여기서는 해당 작업을 수행 하도록 명령을 작성합니다 under the hood.

echo "$fld"; # => [^|]* echo "$fld7"; # => [^|]*[^|]*....7회

답변4

흥미롭게 공부하다sed행동

sed 's/\(\([^|]\?\)[^|]*|\)\{7\}.*/\2/' input.file.txt

아니면 탈출을 줄이세요

sed -r 's/(([^|]?)[^|]*\|){7}.*/\2/' input.file.txt

아니면 정규 표현식을 피하세요

sed '/\n/{s/./\n/2;P;d;};s/|/\n/6;s/$/\n/;D' input.file.txt

관련 정보