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
원래 값으로 다시 설정하는 것을 잊지 마십시오 .