标签: wc

“wc -w <file.txt”如何工作?

我试图使用 wc 仅获取文件中的单词数。wc -w file.txt给我加上文件名。我不想要文件名。所以,我看到这wc -w < file.txt有效。

我不明白这个命令是如何工作的。我什至无法在看到此命令的答案下方添加评论。

为什么在 的情况下不打印文件名wc -w < file.txt

unix linux wc

5
推荐指数
1
解决办法
4289
查看次数

如何使用shell统计UTF-8编码文件中的汉字字符数

\n

cat doc.txt将显示以下字符:

\n
\n\n
\xe4\xbd\xa0\xe5\xa5\xbd Hello!\n\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87\xe3\x80\x82This is a Chinese doc.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以使用命令

\n\n
\n

wc -w doc.txt

\n
\n\n

但它会显示:

\n\n
8 doc.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

该命令将字符\xe4\xbd\xa0\xe5\xa5\xbd\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87都作为一个单词,而实际上\xe4\xbd\xa0\xe5\xa5\xbd是两个中文单词,\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87 是四个中文单词。

\n\n

我想要的是正确计算这些中文单词(示例中有12个单词),有人可以帮忙吗?

\n

shell utf-8 wc

5
推荐指数
1
解决办法
2102
查看次数

使用 wc -l 命令时出现意外的前导空格

我正在尝试执行以下命令 - 但输出中引入了一些前导空格。

ls -lrt | wc -l
     29
echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

当我在另一台机器上运行相同的命令时,输出符合预期。

ls -lrt | wc -l
183
echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

前导空格导致我的 perl 验证失败

unless ( $phCountRet->{COUNT} =~ /^\d+$/ ){
...
}
Run Code Online (Sandbox Code Playgroud)

我可以选择修剪前导空格然后进行验证,但这不会是一个干净的解决方案。

任何关于可能导致这种情况的指针都会有很大帮助。

unix perl wc

5
推荐指数
1
解决办法
1649
查看次数

为什么wc加一

可以说我有一个很长的词N

word0=`echo` # N = 0  
word1=`echo A` # N = 1
word2=`echo AB` # N = 2
word5=`echo ABCDE` # N = 5
word4=`echo "ABCD"` # N = 4
Run Code Online (Sandbox Code Playgroud)

我用来wc获取 的长度wordN,例如:

echo $word0 | wc 
   1 
echo $word1 | wc 
   2 
echo $word4 | wc 
   5
Run Code Online (Sandbox Code Playgroud)

wc字长加1,结果是N+1

即使有wc -cwc -m我得到N+1

问题:应该wc这样工作吗?如果是这样,为什么要加+1?

bash wc

4
推荐指数
1
解决办法
4019
查看次数

R data.table fread命令:如何读取带有不规则分隔符的大文件?

我必须处理120个~2 GB(525600行×302列)文件的集合.目标是制作一些统计数据并将结果放在干净的SQLite数据库中.

当我的脚本使用read.table()导入时,一切正常,但速度很慢.所以我尝试使用fread,来自data.table包(版本1.9.2),但它给了我这个错误:

Error in fread(txt, header = T, select = c("YYY", "MM", "DD",  : 
Not positioned correctly after testing format of header row. ch=' '
Run Code Online (Sandbox Code Playgroud)

我的数据的前2行和7行看起来像这样:

 YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00
Run Code Online (Sandbox Code Playgroud)

因此,开头有第一个空格,日期列之间只有一个空格,其他列之间有任意数量的空格.

我试过用这样的命令来转换逗号中的空格:

DT <- fread(
            paste("sed 's/\\s\\+/,/g'", txt),
            header=T,
            select=c('HHHH','MM','DD','HH')
)
Run Code Online (Sandbox Code Playgroud)

没有成功:问题仍然存在,使用sed命令似乎很慢.

Fread似乎不喜欢"任意数量的空间"作为分隔符或开头的空列.任何的想法 ?

这是(可能)最小的可重复示例(40790之后的换行符):

txt<-print(" YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00")

testDT<-fread(txt,
              header=T,
              select=c("YYY","MM","DD","HH")
)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 !

更新: - …

r sed wc read.table data.table

4
推荐指数
1
解决办法
5080
查看次数

将wc行附加到filename

标题说明了一切.我已经设法得到了这条线:

lines=$(wc file.txt | awk {'print $1'});
Run Code Online (Sandbox Code Playgroud)

但我可以使用辅助将其附加到文件名.奖励点用于向我展示如何在当前目录中的所有.txt文件上循环它.

bash shell awk file-rename wc

4
推荐指数
1
解决办法
290
查看次数

使用-T开关运行时,不安全的$ ENV {ENV}

当我尝试perlfaq5的最后一个例子时 :我怎么算一个文件中的行号?我收到一条错误消息.我该怎么做才能使脚本正常工作?

#!/usr/local/bin/perl -T
use warnings;
use 5.012;

$ENV{PATH} = undef;

my $filename = 'perl2.pl';

if( $filename =~ /^([0-9a-z_.]+)\z/ ) {
    my $lines = `/usr/bin/wc -l $1`;
    print $lines;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Insecure $ENV{ENV} while running with -T switch at ./perl1.pl line 10.
Run Code Online (Sandbox Code Playgroud)

perl env path taint wc

3
推荐指数
1
解决办法
4331
查看次数

捕获输出并计算其行数

我想运行一个find命令,然后计算输出的行,并给出结果的输出.我的直截了当的做法是这样的:

output=$(find ...)
lines=$(echo "$output" | wc -l)
echo "$output"
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,使用它echo来管道wc添加一个换行符,所以即使find没有找到任何东西(零行输出),也wc就是放弃1(对于echo附加的换行符).

我改变了echo一个printf防止追加新行到输出,但随后也的一个行输出find就像var/是没有一个换行符,因此wc给出了0.

问题在于捕获输出($(...)).它会删除在我的情况下相关的尾随换行符.

这可以以某种方式防止吗?

我的原始任务是否有完全不同的方法?

bash find wc

3
推荐指数
1
解决办法
66
查看次数

Unix:如何计算目录中所有文件中包含字符串的所有行,并分别查看每个文件的输出

在UNIX中,我可以执行以下操作:

grep -o 'string' myFile.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

它将计算包含字符串的myFile.txt中的行数.或者我可以使用:

grep -o 'string' *.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

这将计算包含该字符串的文件夹中所有.txt扩展名文件中的行数.我正在寻找一种方法来对文件夹中的所有文件进行计数,但是要查看每个文件的输出分隔,例如:

myFile.txt 10000

myFile2.txt 20000

myFile3.txt 30000

我希望我已经清楚了,如果没有,你可以在输出中看到一个有点接近的例子:

wc -l *.txt
Run Code Online (Sandbox Code Playgroud)

unix grep wc

3
推荐指数
1
解决办法
3628
查看次数

wc -l 和 python 行数不同

我想知道为什么对于此处( train_en.txt) 和此处( )给出的文件,使用 bash 进行的简单行计数给出的行数与使用 python(版本 3.6)计算的行数不同train_de.txt。在 bash 中,我使用以下命令:

wc -l train_en.txt
wc -l train_de.txt
Run Code Online (Sandbox Code Playgroud)

输出分别为 4520620 和 4520620。

在 python 中,我使用以下命令:

print(sum(1 for line in open('train_en.txt')))
print(sum(1 for line in open('train_de.txt')))
Run Code Online (Sandbox Code Playgroud)

输出分别为 4521327 和 4521186。

当我使用 python 命令时

len(open('train_en.txt').read().splitlines())
len(open('train_de.txt').read().splitlines())
Run Code Online (Sandbox Code Playgroud)

我分别得到 4521334 和 4521186(其train_en.txt结果与之前的 python 命令的结果不匹配)。

作为参考,这些是通过连接WMT '14 英语到德语翻译任务中的Common CrawlEuroparlNews Commentary数据集(按顺序)生成的并行文本语料库,并且应具有相同的行数。

python bash count line wc

3
推荐指数
1
解决办法
526
查看次数

标签 统计

wc ×10

bash ×4

unix ×3

perl ×2

shell ×2

awk ×1

count ×1

data.table ×1

env ×1

file-rename ×1

find ×1

grep ×1

line ×1

linux ×1

path ×1

python ×1

r ×1

read.table ×1

sed ×1

taint ×1

utf-8 ×1