簡體   English   中英

在bash中讀取CSV文件

[英]Read a CSV file in bash

我需要在外殼中讀取CSV文件,我可以在單元格中只有一行的CSV文件中使用該文件。 但是,如果我們在CSV文件的單元格中有多行,那么我將無法分隔CSV文件。

Filename            Lines
/etc/hosts          example.test.com
                    example2.test.com
/etc/resolv.conf    nameserver dns.test.com
                    search test.com

我將從CSV文件中接收用戶的輸入,並且必須將給定的行添加到提到的文件中。 此處CSV文件的每個單元格中都有多行,如果我嘗試顯示該文件,則該文件將以不同的順序給出。

[user2@mon ~]$ cat test2.csv
"Filename","Lines"
"/etc/hosts","example.test.com"
,"example2.test.com"
"/etc/resolv.conf","nameserver dns.test.com"
,"search test.com"

有什么辦法可以從該文件中讀取多行,並且行數總是不一樣。

這可能是您想要的:

awk -F, '{ sub(/^"/, "", $1); sub(/"$/, "", $1);
           sub(/^"/, "", $2); sub(/"$/, "", $2);
           printf "%-20s  %s\n", $1, $2;
         }'

如果您花費更多時間進行手動撲打,很有可能會壓縮替代操作。 這是一個脆弱的解決方案(大多數未使用專門用於處理CSV格式的代碼的解決方案都是脆弱的); 如果在任何用引號引起來的字段中出現逗號,則將嚴重失敗。

應用於您的數據,它會產生:

Filename              Lines
/etc/hosts            example.test.com
                      example2.test.com
/etc/resolv.conf      nameserver dns.test.com
                      search test.com

其他可靠地處理CSV格式數據的工具包括:

如果這不是您想要的內容,請闡明問題。

假設您的輸入與您的示例一樣基本,那么您也許可以通過以下操作而擺脫:

sed 's/^,/ ,/' test2.csv | tr -d \" | column -s, -t

暫無
暫無

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

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