Bash 带变量、字数和zcat的单行命令
我的服务器上有许多文件,其中包含许多行:Bash 带变量、字数和zcat的单行命令,bash,csv,unix,awk,command-line,Bash,Csv,Unix,Awk,Command Line,我的服务器上有许多文件,其中包含许多行: 201701010530.contentState.csv.gz 201701020530.contentState.csv.gz 201701030530.contentState.csv.gz 201701040530.contentState.csv.gz 我希望使用一行命令可以得到以下结果: 170033|20170101 169865|20170102 170010|20170103 170715|20170104 目标是获得每个文件的行数
201701010530.contentState.csv.gz
201701020530.contentState.csv.gz
201701030530.contentState.csv.gz
201701040530.contentState.csv.gz
我希望使用一行命令可以得到以下结果:
170033|20170101
169865|20170102
170010|20170103
170715|20170104
目标是获得每个文件的行数,只需保留文件名中已有的日期即可
我试过了,但结果不是一行而是两行
for f in $(ls -1 2017*gz);do zcat $f | wc -l;echo $f | awk '{print substr($0,1,8)}';done
提前感谢各位。只需使用
zcat文件| wc-l
即可获得行数
对于名称,我理解提取前8个字符就足够了:
$ t="201701030530.contentState.csv.gz"
$ echo "${t:0:8}"
20170103
总而言之:
for file in 2017*gz;
do
lines=$(zcat "$file" | wc -l)
printf "%s|%s\n" "$lines" "${file:0:8}"
done > myresult.csv
注意2017*gz中文件的
用法
浏览与2017*gz
模式匹配的文件:这就足够了,无需解析ls
使用zgrep-c^文件
计算行数,这里用awk封装:
$ awk 'FNR==1{ "zgrep -c ^ " FILENAME | getline s; print s "|" substr(FILENAME,1,8) }' *.gz
12|20170101
整个“zgrep-c^”文件名
可能应该在一个var(s
)中,然后是s | getline s