假设我有一个包含许多行和多列的大文件。我想知道我使用bash有多少行和列。
答案 0 :(得分:54)
列:awk '{print NF}' file | sort -nu | tail -n 1
使用head -n 1
表示最低列数,tail -n 1
表示最高列数。
UUOC人群的cat file | wc -l
或wc -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
计算总行数。