簡體   English   中英

如何使用shell命令讀取.csv文件?

[英]How to read a .csv file with shell command?

我有一個.csv文件,需要從中提取值。 格式如下:

文件的第一行(無數據)

1;傑克;丹尼爾斯;馬德里; 484016;

2;愛麗絲;摩根;倫敦; 564127;

等等...

我需要一個shell命令,該命令讀取.csv中特定列的所有行,將每個行與一個字符串進行比較,並在找到匹配行時返回一個值。 在Java中,我將其定義為:

> boolean findMatchInCSV(String valueToFind, int colNumber, String
> colSeparator)

列之間的分隔符實際上可能會發生變化,這就是為什么我想要一個比較通用的東西的原因:)

但是我需要它作為shell命令 ,這可能嗎?

謝謝

grep "my_string" file |awk -F ";" '{print $5}'

要么

awk -F ";" '/my_string/ {print $5}' file

對於第二列:

awk -F ";" '$2 ~ /my_string/ {print $5}' file

對於完全匹配:

awk -F ";" '$2 == "my_string" {print $5}' file

我認為您正在尋找類似的東西

FILE=data.csv
VALUE="$1"
COLNUM=$2
IFS="$3"

while read -r -a myArray
do
    if "$myArray[$COLNUM]"=="$VALUE"; then
        exit 0
    fi
done < tail -n +2 $FILE

exit 1

我需要一個讀取所有行的shell命令

cat 1.csv                         # read the file

.csv中的特定列

cat 1.csv | cut -f5 -d';'         # keep only the field #5 (use ';' as separator)

比較每個字符串

# keep only the row where the value of the field is exactly 'foo'
cat 1.csv | cut -f5 -d';' | grep '^foo$'

找到匹配行時返回一個值。

最后一個請求不清楚。

上面的代碼為每行顯示一次搜索的字符串( foo ),它是列#5的值(從1開始計數)。 列之間用;隔開;

不幸的是,它不處理帶引號的字符串。 如果任何字段中的值都包含分隔符( ; ),則CSV格式允許將字段值括在雙引號( " )中,以防止將分隔符字符解釋為分隔符(強制使用其文字值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM