计算bash中的列数

时间:2011-04-23 00:10:56

标签: bash row

假设我有一个包含许多行和多列的大文件。我想知道我使用bash有多少行和列。

13 个答案:

答案 0 :(得分:54)

列:awk '{print NF}' file | sort -nu | tail -n 1

使用head -n 1表示最低列数,tail -n 1表示最高列数。

UUOC人群的cat file | wc -lwc -l < file行。

答案 1 :(得分:5)

或者对count列进行计数,请计算列之间的分隔符。我发现这是一个简洁和易于记忆的良好平衡。当然,如果您的数据包含列分隔符,这将不起作用。

head -n1 myfile.txt | grep -o " " | wc -l

使用head -n1抓取文件的第一行。 使用grep -o计算所有空格,并输出在新行上找到的每个空格。使用wc -l计算行数。

答案 2 :(得分:4)

如果您的文件很大,但您确定每行的列数保持不变(并且您没有标题),请使用:

head -n 1 FILE | awk '{print NF}'

查找列数,其中FILE是您的文件名。

要查找行数&#39; wc -l FILE&#39;会工作的。

答案 3 :(得分:3)

你可以使用bash。请注意,对于GB非常大的文件,请使用awk/wc。但是,对于具有几MB的文件,它仍然可以在性能上进行管理。

declare -i count=0
while read
do
    ((count++))
done < file    
echo "line count: $count"

答案 4 :(得分:2)

kirill_igum的回答很少,你可以很容易地计算你想要的任何一行的列数,这就是为什么我会提出这个问题,即使这个问题是要求整个档案。 (虽然如果你的文件在每一行中都有相同的列,当然这仍然有用):

head -2 file |tail -1 |tr '\t' '\n' |wc -l

给出第2行的列数。 例如将2替换为55以获得第55行。

-bash-4.2$ cat file
1       2       3
1       2       3       4
1       2
1       2       3       4       5

-bash-4.2$ head -1 file |tail -1 |tr '\t' '\n' |wc -l
3
-bash-4.2$ head -4 file |tail -1 |tr '\t' '\n' |wc -l
5

如果您的文件由制表符分隔,则上面的代码有效,因为我们将其定义为&#34; tr&#34;。如果您的文件有另一个分隔符,例如逗号,您仍然可以计算您的&#34;列&#34;通过简单地改变分隔符来使用相同的技巧&#34; t&#34;到&#34;,&#34;:

-bash-4.2$ cat csvfile
1,2,3,4
1,2
1,2,3,4,5
-bash-4.2$ head -2 csvfile |tail -1 |tr '\,' '\n' |wc -l
2

答案 5 :(得分:1)

简单行计数为$(wc -l "$file")。使用$(wc -lL "$file")显示行数和最长行中的字符数。

答案 6 :(得分:1)

head -1 file.tsv |head -1 train.tsv |tr '\t' '\n' |wc -l

取第一行,更改标签(或者您可以使用&#39;&#39;而不是&#39; \ t&#39;表示逗号),计算行数。

答案 7 :(得分:1)

如果计算第一列中的列数足够,请尝试以下操作:

awk -F'\t' '{print NF; exit}' myBigFile.tsv

其中\t是列分隔符。

答案 8 :(得分:0)

Perl solution:

perl -ane '$maxc = $#F if $#F > $maxc; END{$maxc++; print "max columns: $maxc\nrows: $.\n"}' file

If your input file is comma-separated:

perl -F, -ane '$maxc = $#F if $#F > $maxc; END{$maxc++; print "max columns: $maxc\nrows: $.\n"}' file

output:

max columns: 5
rows: 2

-a autosplits input line to @F array
$#F is the number of columns -1
-F, field separator of , instead of whitespace
$. is the line number (number of rows)

答案 9 :(得分:0)

一种非常简单的方法来计算纯bash中第一行的列(没有awk,perl或其他语言):

read -r line < $input_file
ncols=`echo $line | wc -w`

如果您的数据格式正确,这将有效。

答案 10 :(得分:0)

以下代码将完成此任务,并允许您指定字段分隔符。这对于包含超过20k行的文件尤其有用。

awk 'BEGIN { 
  FS="|"; 
  min=10000; 
}
{ 
  if( NF > max ) max = NF; 
  if( NF < min ) min = NF;
} 
END { 
  print "Max=" max; 
  print "Min=" min; 
} ' myPipeDelimitedFile.dat

答案 11 :(得分:0)

awk 'BEGIN{FS=","}END{print "COLUMN NO: "NF " ROWS NO: "NR}' file

您可以使用任何定界符作为字段分隔符,并且可以找到行数和列数

答案 12 :(得分:0)

对于行,您只需使用wc -l file

-l代表总行

对于列uou可以简单地使用head -1 file | tr ";" "\n" | wc -l

说明
head -1 file
抓住文件的第一行,应该是标题, 并通过管道将其发送到下一个cmd
| tr ";" "\n"

tr代表翻译。
它将所有;个字符转换为换行符。
在此示例中,;是您的定界符。

然后将数据发送到下一个命令。

wc -l
计算总行数。