Bash 在csv文件中输出第一个副本
如何输出csv文件的第一个副本? 例如,如果我有:Bash 在csv文件中输出第一个副本,bash,sorting,csv,awk,duplicates,Bash,Sorting,Csv,Awk,Duplicates,如何输出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,
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
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"
我想先输出csv文件的第一行,比如awk(输出第一行的代码)>>file.csv
,然后比较该行的第一个字段和下一行的第一个字段,如果它们相同,检查下一行。在到达新行之前,代码将输出新的不同行,因此再次awk(输出的代码)>>file.csv
,并将重复该操作,直到检查完成
我对bash编码有点陌生,但到目前为止我很喜欢它,我目前正在编写一个csv文件,我需要一些帮助。谢谢大家如果我理解你的意思,你想要这样的东西:
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
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"
prev_field=“”
读行时
做
当前_字段=$(回显$行|切-d','-f 1)
[[$current\u field!=$prev\u field]&&echo$line
上一个字段=$当前字段
完成<“stuff.csv”
其中stuff.csv
是您的文件名。这是假设您要做的是获取csv行中的第一个字段,只打印它的第一个唯一匹配项,如果是这种情况,我认为您的输出可能会丢失一些。使用awk:
awk -F, '!a[$1]++' file.csv
awk形成一个数组,其中第一列是键,值是特定键出现的次数。”<代码>!只有当第一列第一次出现时,[$1]+”才为真,因此打印第一行
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
使用uniq:
sort lines.csv | uniq -w 17
如果您的第一列是固定大小的(17)。lines.csv是一个包含原始输入的文件。哦,是的,我遗漏了一些,但这正是我需要的,我如何输出这个新编译的列表?我想我不能把>newStuff.csv放在世界的任何地方code@user2143205您只需运行脚本并将输出重定向到一个文件,如so
bash script.sh>newStuff.csv
。我倾向于这样做,因为它在数据结束的地方更灵活。换句话说,你可以在输出上执行类似于bash script.sh | grep“something”
和grep的操作。没关系,我在完成后粘贴了>newStuff.csv
,它成功了。谢谢