我有一个csv文件,格式如下:
Time, Field1, Field2,
1000, 1, 2,
1001, 3, 4,
1002, 5, 6,
我想从时间列中获取第一个和最后一个元素,并将它们存储在我的bash脚本中的变量中。
所以,基于这个例子,我需要:
$start=1000
$end=1002
我该怎么做?
答案 0 :(得分:5)
你有很多选择。以下是其中一些:
使用head
,tail
和cut
$start=$(head -n2 file.csv | tail -n1 | cut -d',' -f1)
$end=$(tail -n1 file.csv | cut -d',' -f1)
使用awk
$start=$(awk -F',' 'NR==2{print $1}' file.csv)
$end=$(awk -F',' 'END{print $1}' file.csv)
单人使用awk
(感谢this answer)
read start finish <<< $(awk -F',' 'NR==2{print $1}END{print $1}' file.csv)
另一位使用awk
read -d'\n' start finish < <(awk -F',' 'NR==2{print $1}END{print $1}' file.csv)
答案 1 :(得分:1)
您可以像这样使用while
循环:
while IFS=',' read -r c _; do
((end=c))
((start==0 && c>0)) && start=$c
done < file.csv
检查变量:
declare -p start end
declare -- start="1000"
declare -- end="1002"
答案 2 :(得分:1)
另外,试试这个:
start_end(){
start=$(cat csv.file | head -n +2 | tail -n 1 | awk -F ',' '{print $1}')
end=$(cat csv.file | tail -n 1 | awk -F ',' '{print $1}')
}
答案 3 :(得分:0)
您可以使用sed -n 's/,.*//;2p;$p' file.csv
从第一列中提取第一个和最后一个字段。从输出中,您可以将它们分开并将其读入变量,如下所示:
{
read start
read end
} < <(sed -n 's/,.*//;2p;$p' file.csv)
第一个read
将第一行读入变量$start
,而第二个read
将输出的第二行读入变量$end
。