我有大约 2k 个文件,我想提取 26 列中的 12 列并将提取的信息保存到新文件中。我一直在使用单个文件执行此操作
cat "oldfile.csv" | grep -v "=" | cut -f 1-4,9,14,15,19,21,22,24,26 > newfile.csv
必须有一种方法可以使用一系列 Unix 命令来处理所有文件。
任何帮助是极大的赞赏
答案1
shell 可以执行循环:
for i in *.csv; do
grep -v "=" "$i" | cut -f 1-4,9,14,15,19,21,22,24,26 > "new.$i"
done
不过,如果您在字段中嵌入了字段分隔符,这将会失败。但不是因为循环。
答案2
如果您想提供特定文件作为脚本的参数,例如名为的脚本process_csv.sh
#!/bin/bash
for arg; do
grep -v "=" "${arg}" | cut -f 1-4,9,14,15,19,21,22,24,26 > "${arg}.new"
done
现在您可以按如下方式运行此脚本,
./process_csv.sh *.csv
或者
./process_csv.sh first.csv fifth.csv seventh.csv
或者
./process_csv.sh somefile1 somefile2
在有人指出之前,在上面的脚本中,如果您不想保留可以shift
在脚本中使用的参数。