我正在使用while
循环来读取文件中的项目列表。在while循环中,
我还使用case
语句来处理特定的条件/列。我无法弄清楚的一个条件是
如何处理列表中的 last 项目。
例如:
#!/usr/local/bin/bash
FILE="myoutputfile.out";
while IFS='' read -r column; do
case column in
visitor_id)
echo "isnull($column|| '[|]' ||";;
updated)
echo "isnull($column::text || '[|]' ||";;
*)
echo "isnull($column::text,'[null!]') || '[|]' ||";;
esac
done <"$FILE"
假设列表内容为:
visitor_id
updated
visitor_list_1
visitor_list_2
visitor_list_3
visitor_list_4
visitor_list_5
我需要使用“ visitor_list_5 ”做一些不同的事情。注意,除了前两个项目之外,列表每次都会有所不同 我有一个案例,但我需要处理最后一个这样的事情:
last_column)
echo "isnull(visitor_list_5::text,'[null!]')) as md5sum"
答案 0 :(得分:1)
使用wc
获取行数。如下所示:
file="myoutputfile.out";
linecount=$(wc -l $file)
counter=1
while IFS='' read -r column; do
case column in
visitor_id)
echo "isnull($column|| '[|]' ||";;
updated)
echo "isnull($column::text || '[|]' ||";;
*)
echo "isnull($column::text,'[null!]') || '[|]' ||";;
esac
if [ "$counter" -eq "$linecount" ]; then
#you found the last line
fi
((counter++))
done <"$file"
另外,请考虑避免使用所有大写变量名。您的系统变量都是大写,如PATH
,您可能会发生冲突。