我的目录中有很多文件。 很难一个接一个地打开,看看它们有多少行或者它们有多少列。
我想知道是否有任何自动方式
举个例子。我在桌面上创建了一个txt文件,并将其称为我的文件
check myfile Myname
FALSE 0 Q9Y383
FALSE 1 Q9Y383
FALSE 2 Q9Y383
FALSE 3 Q15366-2
FALSE 6 Q15366-2
FALSE 7 Q15366-2
我将其粘贴在那里,所以我确信我有3列7行(当我用xls文件打开它们时)
我尝试为
这样的单个文件执行此操作wc -l mytextfile
显示0
这只是一个文件,如果我有1000个文件怎么办?
答案 0 :(得分:3)
wc -l file
会显示行数;假设标题中包含逗号分隔值且没有文字逗号,read -r -d $'\r' -a cols <file && echo "${#cols[@]}"
将为您提供列数(在第一行中)。
所有这些都适用于通配符。如果您有1000个文件,则可以运行:
printf '%s\0' *.txt | xargs -0 wc -l
...或...
for file in *.txt; do
read -r -a cols <"$file" && echo "$file ${#cols[@]}"
done
请注意,至少在另一个问题中,您有一个带CR换行符的文本文件,而不是LF或CRLF换行符。对于那些,您将要使用read -r -d $'\r' -a cols
。
同样,如果您的文本文件格式因同样的原因阻止wc -l
正常工作,您可能需要以下效率低得多的替代方案:
for file in *.txt; do
printf '%s\t' "$file"
tr '\r' '\n' <"$file" | wc -l
done
答案 1 :(得分:3)
假设:
$ cat /tmp/f.txt
check myfile Myname
FALSE 0 Q9Y383
FALSE 1 Q9Y383
FALSE 2 Q9Y383
FALSE 3 Q15366-2
FALSE 6 Q15366-2
FALSE 7 Q15366-2
对于单个文件,您可以使用awk
:
$ awk 'NR==1{cols=NF} END{print cols, NR}' /tmp/f.txt
3 7
如果您有gawk
,则可以轻松处理多个文件(*.ext
)文件:
$ gawk 'BEGIN { printf "%4s%8s\n", "cols", "lines"}
FNR==1{cols=NF}
ENDFILE{cnt++;printf "%3i %10i %-60s\n", cols, FNR, FILENAME}
END{ printf "%14i lines in %i files\n", NR, cnt}' /tmp/*.txt
哪个产生(对我来说)
cols lines
3 7 /tmp/f.txt
1 20000000 /tmp/test.txt
20000007 lines in 2 files
修改
如果您有古老的Mac文件(newlines不是某种形式的\n
),您可以这样做:
$ awk -v RS='\r' 'NR==1{cols=NF} END{print cols, NR}' your_file
或者,
$ gawk -v RS='\r' 'BEGIN { printf "%4s%8s\n", "cols", "lines"}
FNR==1 { cols=NF }
ENDFILE { cnt++;printf "%3i %10i %-60s\n", cols, FNR, FILENAME }
END { printf "%14i lines in %i files\n", NR, cnt}' *.files
答案 2 :(得分:0)
只需使用for
声明。
for f in *
do
wc -l "$f"
done
并在for循环中添加内容,当您还有其他重复内容时
答案 3 :(得分:0)
你的文件有'mac'行结尾 - 也就是说,行是由回车符而不是换行符(它们是'unix'行结尾)分隔的,而wc
只能识别后者。< / p>
您有两种选择:将输入文件转换为“mac”行结尾一次或即时。
例如
% alias frommac="tr '\r' '\n'"
% frommac <myfile >myfile.unix
% wc -l myfile.unix
或
% frommac <myfile | wc -l
如果您有很多这些文件,那么您可以执行类似
的操作% wc -l *.unix
(如果您已按上述方式预转换输入文件)或
% for f in *; do frommac <$f | wc -l; done
......或类似的东西。