如何输出csv文件的第一个副本? 例如,如果我有:
00:0D:67:24:D7:25,1,-34,123,135
00:0D:67:24:D7:25,1,-84,567,654
00:0D:67:24:D7:26,1,-83,456,234
00:0D:67:24:D7:26,1,-86,123,124
00:0D:67:24:D7:2C,1,-56,245,134
00:0D:67:24:D7:2C,1,-83,442,123
00:18:E7:EB:BC:A9,5,-70,123,136
00:18:E7:EB:BC:A9,5,-90,986,545
00:22:A4:25:A8:F9,6,-81,124,234
00:22:A4:25:A8:F9,6,-90,456,654
64:0F:28:D9:6E:F9,1,-67,789,766
64:0F:28:D9:6E:F9,1,-85,765,123
74:9D:DC:CB:73:89,10,-70,253,777
我希望我的输出看起来像这样:
00:0D:67:24:D7:25,1,-34,123,135
00:0D:67:24:D7:26,1,-83,456,234
00:0D:67:24:D7:2C,1,-56,245,134
00:18:E7:EB:BC:A9,5,-70,123,136
00:22:A4:25:A8:F9,6,-81,124,234
64:0F:28:D9:6E:F9,1,-67,789,766
74:9D:DC:CB:73:89,10,-70,253,777
我正在考虑首先输出csv文件的第一行,如awk (code that outputs first row) >> file.csv
,然后将行的第一个字段与下一行的第一个字段进行比较,如果它们相同,请检查下一行。在它到达新行之前,代码将再次输出新的不同行awk (code that outputs) >> file.csv
并且它将重复直到检查完成
我有点新的bash编码,但我喜欢它到目前为止,我目前正在措辞一个csv文件,我需要一些帮助。谢谢大家
答案 0 :(得分:5)
使用awk:
awk -F, '!a[$1]++' file.csv
awk形成一个数组,其中第一列是键,值是否为count。特定密钥存在的时间。 '!a[$1]++
'只有在第一列出现第一列时才会成立,因此第一次出现该行。
答案 1 :(得分:1)
如果我理解你所得到的东西,你会想要这样的东西:
prev_field=""
while read line
do
current_field=$(echo $line | cut -d ',' -f 1)
[[ $current_field != $prev_field ]] && echo $line
prev_field=$current_field
done < "stuff.csv"
其中stuff.csv
是您文件的名称。假设您尝试做的是取csv行中的第一个字段并仅打印它的第一个唯一字段,如果是这样的话,我认为您的输出可能是缺少一些。
答案 2 :(得分:1)
使用uniq:
sort lines.csv | uniq -w 17
如果您的第一列是固定大小(17)。 lines.csv是一个包含原始输入的文件。
答案 3 :(得分:0)
perl -F, -lane '$x{$F[0]}++;print if($x{$F[0]}==1)' your_file
如果你想在原地更改文件:
perl -i -F, -lane '$x{$F[0]}++;print if($x{$F[0]}==1)' your_file