[英]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格式數據的工具包括:
csvfix
。 如果這不是您想要的內容,請闡明問題。
假設您的輸入與您的示例一樣基本,那么您也許可以通過以下操作而擺脫:
sed 's/^,/ ,/' test2.csv | tr -d \" | column -s, -t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.