2

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ファイルを表現しているので、助けが必要です。みんな、ありがとう

4

4 に答える 4

5

awkの使用:

awk -F, '!a[$1]++' file.csv

awkは、最初の列がキーで、値がnoのカウントである配列を形成します。特定のキーが存在する場合があります。' !a[$1]++'は、最初の列の最初の出現時にのみ真になります。したがって、その行の最初の出現が印刷されます。

于 2013-03-08T02:38:46.723 に答える
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行の最初のフィールドを取得し、その最初の一意のオカレンスのみを出力することを想定しています。その場合、出力がいくつか欠落している可能性があります。

于 2013-03-08T02:11:30.027 に答える
1

uniqの使用:

sort lines.csv | uniq -w 17

最初の列が固定サイズ(17)の場合。lines.csvは、元の入力を含むファイルです。

于 2013-04-23T14:59:22.770 に答える
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
于 2013-03-08T06:19:55.827 に答える