系统
Linux local 5.0.0-27-lowlatency #28-Ubuntu SMP PREEMPT Tue Aug 20 20:33:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
问题
当字段中存在时,如何比较两个列除以,
和字段(带有的经典 csv )。"
,
"
输入文件。
Titulka,231096,Spárovka borová 18 x 200 x 600 mm,https://eshop.unihobby.cz/stavba-drevo-a-wpc-sparovky-sparovka-borova-18x200x600mm/144020p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/231096-sp-rovka-borov-1-pou-t-tuto.jpg,42,45
Titulka,345602,"Lak Aquafin Plus čirý lesklý 0,6 kg",https://eshop.unihobby.cz/bydleni-barvy-a-laky-laky-a-lazury-lak-aquafin-plus-ciry-leskly-0-6-kg/153252p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/345602-aquafin-plus-plechovka.jpg,179,199
Titulka,345588,"Lak Movi Pur OSB čirý lesklý 0,6 kg",https://eshop.unihobby.cz/bydleni-barvy-a-laky-laky-a-lazury-lak-movi-pur-osb-ciry-leskly-0-6-kg/150470p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/345588.jpg,209,229
Titulka,213993,Schodnice masiv 300x1000x40 mm - smrk,https://eshop.unihobby.cz/stavba-schodiste-a-zabradli-schodnice-schodnice-masiv-300x1000x40-mm-smrk/138451p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/213993-schodnice-masiv-300x1000x40-smrk.jpg,299,329
2,233292,Střešní okno plastové kyvné Klasik NK E1 - 55 x 78 cm,https://eshop.unihobby.cz/stavba-okna-stresni-okna-stresni-okno-plastove-kyvne-klasik-nk-e1-55-x-78-cm/144206p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/233292-2-.jpg,3990,3990
2,234185,Střešní okno dřevěné kyvné Klasik MNK S1 - 55 x 78 cm,https://eshop.unihobby.cz/stavba-okna-stresni-okna-stresni-okna-stresni-okno-drevene-kyvne-klasik-mnk-s1-55-x-78-cm/144478p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/233288-3--4.jpg,2990,2990
...
预期输出文件(比较$6
和$7
,$7
当写入时$6 != $7
)。
Titulka,231096,Spárovka borová 18 x 200 x 600 mm,https://eshop.unihobby.cz/stavba-drevo-a-wpc-sparovky-sparovka-borova-18x200x600mm/144020p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/231096-sp-rovka-borov-1-pou-t-tuto.jpg,42,45
Titulka,345602,"Lak Aquafin Plus čirý lesklý 0,6 kg",https://eshop.unihobby.cz/bydleni-barvy-a-laky-laky-a-lazury-lak-aquafin-plus-ciry-leskly-0-6-kg/153252p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/345602-aquafin-plus-plechovka.jpg,179,199
Titulka,345588,"Lak Movi Pur OSB čirý lesklý 0,6 kg",https://eshop.unihobby.cz/bydleni-barvy-a-laky-laky-a-lazury-lak-movi-pur-osb-ciry-leskly-0-6-kg/150470p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/345588.jpg,209,229
Titulka,213993,Schodnice masiv 300x1000x40 mm - smrk,https://eshop.unihobby.cz/stavba-schodiste-a-zabradli-schodnice-schodnice-masiv-300x1000x40-mm-smrk/138451p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/213993-schodnice-masiv-300x1000x40-smrk.jpg,299,329
2,233292,Střešní okno plastové kyvné Klasik NK E1 - 55 x 78 cm,https://eshop.unihobby.cz/stavba-okna-stresni-okna-stresni-okno-plastove-kyvne-klasik-nk-e1-55-x-78-cm/144206p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/233292-2-.jpg,3990 /* here is $6 = $7, so no output for $7 */
2,234185,Střešní okno dřevěné kyvné Klasik MNK S1 - 55 x 78 cm,https://eshop.unihobby.cz/stavba-okna-stresni-okna-stresni-okna-stresni-okno-drevene-kyvne-klasik-mnk-s1-55-x-78-cm/144478p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/233288-3--4.jpg,2990 /* here is $6 = $7, so no output for $7 */
...
我试过
awk -F ',' '{ if ($6 != $7) print $7; }' FILE
返回错误值并仅返回$7
字段。
谢谢。
答案1
如果您的 CSV 字段内有命令,awk
这不是最好的解决方案。
对于您的示例文件,您仍然可以使用它,因为您可以简单地比较最后两个字段,而不必关心之前的内容:
awk '
BEGIN{FS=OFS=","}
$NF==$(NF-1){$NF=""}1
' file
但一般来说,使用合适的 CSV 解析器解析 CSV 会更好,例如csvkit
:
csvsql -H --query '
SELECT a,b,c,d,e,f, case g when f then NULL else g END g from file
' file | tail -n+2
(我添加了tail -n+2
隐藏标题行)
请注意,这两种解决方案都会保留字段总数,只是清空最后一个字段。要删除最后一个逗号,请添加| sed 's/,$//'
。