我有一个名为 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
回其原始值。