Awk仅适用于最终文件

时间:2017-02-19 20:17:23

标签: bash csv parsing awk

我正在尝试使用以下循环处理许多.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处理每个文件?

2 个答案:

答案 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