我的csv具有选举结果
/* Match, but no default */
SELECT TOP 1 id, lang
FROM (
SELECT id, lang
FROM t3
WHERE id = 3
UNION ALL
SELECT id, lang
FROM t3
WHERE id IN (1,2) /* DEFAULT IDs */
) s1
ORDER BY id DESC
;
聚会名称后面的第二列是投票百分比(01546 ... 02315 ...)。
是否可以使用Mac终端在特定列的第3和4rt字符之间添加点(。),以产生以下输出:
/* Default 1 and 2 are not ID 2 and 1. */
CREATE TABLE t4 ( id int, lang varchar(10) ) ;
INSERT INTO t4 (id, lang)
VALUES (40,'Default 2'),(42,'Default 1'),(3,'Klingon')
,(50, 'Common'),(20, 'Nadsat'),(55, 'Furbish')
;
/* No match. Pick Default. */
SELECT TOP 1 s1.id, s1.lang
FROM (
SELECT id, lang
FROM t4
WHERE id = 9999
UNION ALL
SELECT s2.id, s2.lang
FROM (
SELECT TOP 1 id, lang
, CASE
WHEN ID = 42 THEN 2
WHEN ID = 40 THEN 1
ELSE 0
END AS sortOrder
FROM t4
WHERE id IN (40,42) /* NEW DEFAULT IDs */
ORDER BY sortOrder DESC
) s2
) s1
ORDER BY s1.id DESC
;
所有百分比列将有5位数字。该表之前和之后都有更多列。
我在当地一家报纸上从事印刷版画工作。我没有太多的编码经验。只是一些基本的HTML和JS。
我们将从选举当局那里收到几份CSV(每个省一个)。
我知道如何使用电子表格应用(excel,libre office)管理此数据。但是我想尽可能避免它们,因为我看到通常可以通过终端执行一些操作(合并,删除列,添加标题),这些操作可以通过Terminal更快,更轻松地完成。
我是终端命令的新手。我在这里发现了一些非常有用的命令(cat可从一个区域的多个区域连接csv,并剪切以提取我需要的列),但与插入字符无关(除非它们位于行首)
我的输出数据将作为交互式地图发送到Datawrapper或Carto,并可能与Qgis进行shp合并并为报纸生成pdf。
答案 0 :(得分:2)
awk 'BEGIN{FS=OFS=","} {for(i=3; i<=NF; i=i+4) $i=sprintf("%.2f",$i/100)}1' file
输出:
PARTY1,00000003,15.46,0020,PARTY2,00000001,23.15,0022,PARTY3,00000000,0.00,0006,
更新:
awk 'BEGIN{FS=OFS=","} {for(i=3; i<=NF; i=i+4) $i=substr($i,1,3)"."substr($i,4,2)}1' file
输出:
PARTY1,00000003,015.46,0020,PARTY2,00000001,023.15,0022,PARTY3,00000000,000.00,0006,