我将如何对目录中的所有文件应用逻辑并将每个输入文件的最终输出通过管道传输到单独的文件? 像下面这样
cut -d, -f2 input1.csv | awk 'END{print NR}' > input1_count.csv
(实际命令很长,但是为了简化起见,我在上面使用了它,以便更好地理解目录中所有文件的逻辑)
答案 0 :(得分:2)
您可以在文件名上使用for
循环:
shopt -s nullglob # enable nullglob
for f in *.csv; do
cut -d, -f2 "$f" | awk 'END{print NR}' > "${f%.csv}_count.csv"
done
shopt -u nullglob # disable nullglob
全局模式*.csv
扩展为启用了nullglob
的空字符串(而不是文字且可能不存在的文件名*.csv
)。
在循环中,将命令管道应用于每个文件名,然后将输出重定向到新文件名。
parameter expansion ${f%.csv}
从文件名中删除最短的后缀模式.csv
。
答案 1 :(得分:1)
一个简单的for
循环就可以完成工作:
for f in *.csv; do
cut -d, -f2 "$f" | awk 'END{print NR}' > "${f/%.csv/_count.csv}"
done
这假定当前目录中存在.csv
个文件。如果文件可能不存在,请在shopt
循环上方使用以下任何for
:
shopt -s failglob # return error when glob matching fails
或
shopt -s nullglob # be silent when glob matching fails