특정 문자열에서 열을 잘라내려면 스크립트에서 잘라내기를 사용하세요.

특정 문자열에서 열을 잘라내려면 스크립트에서 잘라내기를 사용하세요.

viagens.txt라는 파일이 있습니다.

2018-10-01:88020:88013:6:4.2
2018-10-01:88020:88014:8:3.8

각 행의 두 번째 열을 확인하는 스크립트를 만들고 싶습니다(이 경우 두 경우 모두 "88020"을 반환함).

그러나 이제 두 번째 열의 숫자를 가져오기 위해 필터링할 수 없습니다. 나는 이 코드를 가지고 있습니다 :

#!/bin/bash
fich=viagens.txt
condutores=condutores.txt
if [ -f $fich ];then
    for f in $(cat $fich); do
        condutor=$(cut -f2 $f)
        echo $condutor
    done
else
    echo "Ficheiro nao existe"
fi

나도 시도했다

#!/bin/bash
fich=viagens.txt
condutores=condutores.txt
if [ -f $fich ];then
    for f in $(cat $fich); do
        condutor=$(cat $f | cut -d' ' -f2)
        echo $condutor
    done
else
    echo "Ficheiro nao existe"
fi

내가 뭘 잘못했나요?

미리 감사드립니다.

답변1

두 스크립트 모두 파일에서 cut이름을 읽어온 파일을 사용합니다 . 두 스크립트 모두에서 오류가 발생 viagens.txt해야 합니다 No such file or directory(질문에 항상 오류를 포함하는 것을 기억하세요).

대신에:

#!/bin/bash

fich=viagens.txt

if [ ! -f "$fich" ]; then
    echo "Ficheiro nao existe" >&2
    exit 1
fi

cut -d : -f 2 <"$fich" |
while read data; do
    printf 'Data read: %s\n' "$data"
done

두 번째로 구분된 필드는 입력에서 cut -d : -f 2반환됩니다 .:cut

또는 해당 열만 출력하려는 ​​경우:

#!/bin/bash

fich=viagens.txt

if [ ! -f "$fich" ]; then
    echo "Ficheiro nao existe" >&2
    exit 1
fi

cut -d : -f 2 <"$fich"

답변2

파일이 존재하는지 미리 확인하더라도 파일의 행을 배열로 읽어서 로 설정하고 두 번째 요소를 인쇄하는 것은 어떻 IFS습니까 :?

IFS=:
while read -a TARR; do echo ${TARR[1]}; done < viagens.txt
88020
88020

IFS원래 값으로 다시 설정하는 것을 잊지 마십시오 .

관련 정보