我正在尝试使用以下循环处理许多.csv文件:
for i in *.csv
do
dos2unix $i
awk '{print $0, FILENAME}' $i>new_edit.csv
done
这个脚本应该将文件名附加到每个文件的末尾,并且它可以正常工作。但是,查看输出new_edit.csv仅包含输入的.csv文件之一的数据。
wc -l new_edit.csv
表示我的awk只处理来自我的一个csv文件的行。如何让我的awk处理每个文件?
答案 0 :(得分:1)
您应该使用>
作为附加重定向器,而不是使用>>
。您也可以用以下代码替换整个代码:
$ awk '{sub(/\r/,"",$NF); print $0, FILENAME}' *.csv > new_edit.csv
答案 1 :(得分:0)
以下计划应该可以帮助您:
因为您使用的是重定向运算符>
,它始终覆盖文件中的内容。如果我们使用追加重定向操作符 >>
替换它,它将处理所有文件并将内容附加到新文件中
#!/bin/bash
for i in *.csv
do
awk '{print $0, FILENAME}' $i>>new_edit.csv
done