如何使用Mac在CSV文件中找到换行符样式(CRLF,CR或LF)

yfjy0ee7  于 2023-09-27  发布在  Mac
关注(0)|答案(3)|浏览(263)

我需要找到在csv文件中使用的换行符类型,使用Mac。我已经从SPSS(统计软件)导出了一个数据集到CSV文件。这个CSV文件将被发送到通过一个寄存器运行,我需要提供有关该文件的信息,如该文件中使用的换行符样式。
当我在Mac上的TextEdit中打开CSV文件时,我没有看到与换行符对应的符号(不是\r\n、\r或\n。只是一个新行,没有指示换行符的符号。我还没有能够找到什么是在SPSS默认使用或如何自定义这一点。我尝试通过终端应用程序和Visual Studio代码(我可以访问的代码)运行文件,但没有指示换行符的符号。有谁知道在这种情况下如何确定CSV文件中使用的换行符样式?

h4cxqtbf

h4cxqtbf1#

根据RFC 4180CRLF是CSV的标准记录分隔符,但LF也经常使用。忘记CR分隔的记录吧,因为这种CSV可能已经不存在了。
这里有一个在大多数情况下都有效的解决方案:

awk '{print (/\r$/ ? "CRLF" : "LF"); exit}' file.csv

前一种方法的问题是CSV记录可以跨越多行,因此遇到LF并不能保证您到达了记录的末尾。解决方法是转到文件的末尾并检查它是如何终止的。
你可以使用perl来实现:

perl -le '
    open(F, '<', $ARGV[0]) or die $!."\n";
    seek(F, -2, 2);
    read(F, $e, 2);
    close(F);
    if("\r\n" eq $e) {print "CRLF"}
    elsif("\n" eq ($e = substr($e, -1))) {print "LF"}
    elsif($e eq "\r") {print "CR"}
' file.csv
xiozqbni

xiozqbni2#

您可以使用二进制编辑器在Visual Studio中打开该文件。你会看到所有的字符。

qgelzfjb

qgelzfjb3#

给出:

printf 'Line 1\r\nLine 2\r\n' >f1.txt
printf 'Line 1\nLine 2\n' >f2.txt

您可以在MacOS上使用file来确定线路终止:

file f{1..2}.txt
f1.txt: ASCII text, with CRLF line terminators
f2.txt: ASCII text

awk

awk 'FILENAME in fn{next}
{fn[FILENAME]; print FILENAME, /\r$/ ? "CRLF" : "LF"}' f{1..2}.txt

或者Ruby:

ruby -e 'ARGV.each{|fn| 
    puts "#{fn}: #{File.open(fn).readline[/\r\n$/] ? "CRLF" : "LF"}"}' f{1..2}.txt

或者Perl:

perl -E 'for $fn (@ARGV){
             open($fh, $fn); say "$fn: ", <$fh>=~/\r\n$/ ? "CRLF" : "LF"}' f{1..2}.txt

在shell中:

for fn in f{1..2}.txt; do
    head -n 1 "$fn" | grep -q "\r$" 
    [ $? -eq 0 ] && echo "$fn: CRLF" || echo "$fn: LF"
done

任何这些(除了file)打印:

f1.txt: CRLF
f2.txt: LF

相关问题