Читать значение из CSV - PullRequest
0 голосов
/ 14 января 2020

Для CSV-файла, который выглядит как:

variables = cl, cd, clp, clv, cdp, cdv, ...  
-0.00000002, 0.01023266, -0.00000002, 0.00000000, 0.00985099, 0.00038167, ...  
-0.00000000, 0.01023305, -0.00000000, 0.00000000, 0.00985080, 0.00038225,  
-0.00000002, 0.01023390, -0.00000002, 0.00000000, 0.00985075, 0.00038315,  
0.00000002, 0.01023482, 0.00000002, 0.00000000, 0.00985070, 0.00038412,  
-0.00000004, 0.01023574, -0.00000004, 0.00000000, 0.00985065, 0.00038509,

...

У меня есть короткий скрипт для чтения значений из CSV-файла, но, как он есть, он возвращает все колонка. Мне нужно, чтобы назначить по одному значению каждой переменной.

export IFS=","
cat file.csv | while read a b c d e f; do echo "$b; done

Это возвращает:

cd  
0.01023266  
0.01023305  
0.01023390  
0.01023482  
0.01023574  

Как мне сделать, чтобы эта команда возвращала только:

0.01023482

Редактировать: следующая строка должна возвращать одно значение из моего файла:

row=4
col=2
str=$(awk 'BEGIN{FS=OFS=","} FNR==$row' history.out | awk  '{print substr($col, 1, length($col)-1)}')
echo $str

Это работает, когда я использую $ 4, но не $ row. Какое окончательное решение? Таким образом, $ str возвращается пустым.

Заранее спасибо.

1 Ответ

1 голос
/ 14 января 2020

РЕДАКТИРОВАТЬ: Поскольку OP показала образцы сейчас, добавьте решение в соответствии с ним сейчас.

row=4
col=2
awk -v R="$row" -v C="$col" 'BEGIN{FS=","} FNR==R{print $C}'  Input_file

Измените FS="," на FS=", " в случае у вас также есть пробел в разделителях запятых.



Это можно легко сделать в awk.

awk 'BEGIN{FS=OFS=","} FNR==4' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...