获取CSV文件中行数的Unix命令

46

你好,我是UNIX的新手,需要从输入的csv文件中获取行数。我已经使用了以下命令来获取行数。

wc -l filename.csv
考虑到文件只包含一条记录,我收到了一些以“*”开头的文件,对于这些文件,如果我使用相同的命令,则计数为0。这里的“*”表示什么?如果我得到一个使用ctrlm(CR)而不是NL的文件,如何获取该文件的行数?请给我一个解决此问题的命令。

考虑到文件只包含一条记录,我收到了一些以“*”开头的文件,对于这些文件,如果我使用相同的命令,则计数为0。 这里的“*”表示什么?如果我得到一个使用ctrlm(CR)而不是NL的文件,如何获取该文件的行数? 请给我一个解决此问题的命令。


1
一些以 * 开头的文件,这是指文件名中只有一个字符 *(还是文件中包含其他内容)? - Rahul
文件有其他内容,但起始字符是*(星号)。 - Devoloper250
6个回答

73

以下查询可帮助您获取计数。

cat FILE_NAME  | wc -l

52
对于包含换行符的 CSV 文件,这将返回错误的结果。 - nedned

36

所有答案都是错误的。CSV 文件允许在引号之间接受换行符,它们仍应被视为同一行的一部分。如果您的机器上有 Python 或 PHP,则可以执行以下操作:

Python

//From stdin
cat *.csv | python -c "import csv; import sys; print(sum(1 for i in csv.reader(sys.stdin)))"

//From file name
python -c "import csv; print(sum(1 for i in csv.reader(open('csv.csv'))))"

PHP

//From stdin
cat *.csv | php -r 'for($i=0; fgetcsv(STDIN); $i++);echo "$i\n";'

//From file name
php -r 'for($i=0, $fp=fopen("csv.csv", "r"); fgetcsv($fp); $i++);echo "$i\n";'

我还创建了一个脚本来模拟wc -l的输出:https://github.com/dhulke/CSVCount


这是处理包含换行符的某些字段(有效)的 CSV 文件的唯一正确答案。 - hansaplast
1
这怎么正确呢?OP说的是Unix命令,而不是用编程语言实现它的方法。 - Limpuls
1
因为Python存在于大多数类Unix系统中,例如awk、wc和其他程序。 - Danilo Souza Morães

13

如果您在同一个文件夹中有多个.csv文件,可以使用

cat *.csv | wc -l

来获取当前目录中所有csv文件的总行数。因此,-c计算字符数,-m计算字节数(只要使用ASCII,两者相同)。您还可以使用wc计算文件数,例如:ls -l | wc -l


8

wc -l mytextfile

统计文件mytextfile中的行数。

或者只输出行数:

wc -l < mytextfile

只输出文件mytextfile中的行数。

Usage: wc [OPTION]... [FILE]...
or:  wc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  With no FILE, or when FILE is -,
read standard input.
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
  -l, --lines            print the newline counts
  --files0-from=F    read input from the files specified by
                       NUL-terminated names in file F;
                       If F is - then read names from standard input
  -L, --max-line-length  print the length of the longest line
  -w, --words            print the word counts
  --help     display this help and exit
  --version  output version information and exit

1

你还可以使用 xsv。它还支持许多其他子命令,这些子命令对于csv文件非常有用。

xsv count file.csv


0

回显 $(wc -l 文件名.csv | awk '{print $1}')


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接