파이프(|)로 구분된 문자열이 있고 이 파이프로 구분된 문자열의 일곱 번째 열에서 첫 번째 문자를 찾아야 합니다.
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
\n
ORS
\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