繁体   English   中英

AWK - 语法错误:文件意外结束

[英]AWK - syntax error: unexpected end of file

我在一个文件夹中有大约 300 个文件,试图删除 CSV 中的逗号,当我在循环中运行时出现错误

我的代码:

#!/bin/bash
FILES=/home/whoisdat/all-data/*
{

for f in $FILES
do  

{
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' $f > allan-$f
}
done

错误:

root@s1.allheartweb.com [all-data]# sh /home/all-data/unique.sh
/home/whoisdat/all-data/unique.sh: line 12: syntax error: unexpected end of file
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i);print $0 >> ("allan-"FILENAME);close("allan-"FILENAME) }' /home/whoisdat/all-data/* 

无需循环文件,只需让 awk 处理所有文件并使用 FILENAME 跟踪正在处理的文件。

做你正在做的事情的正确方法是:

awk -F'"' -v OFS='' '
    FNR==1 { close(out); out="allan-"FILENAME }
    { for (i=2; i<=NF; i+=2) gsub(/,/, "", $i); print > out }
' /home/whoisdat/all-data/*

当我们开始读取下一个输入文件时,我们关闭之前的 output 文件,以避免大多数 awk 在超过十几个左右的限制时出现“打开文件过多”错误(GNU awk,它可以处理许多打开的文件,速度会变慢相反,这也是不可取的),我们只在此处关闭它,而不是在每个输入行处理一次,以避免在每个输入行打开和关闭 output 文件对性能造成重大影响。

以上假设您没有在 /home/whoisdat/all-data/ 下运行命令,因此在脚本运行时在 /home/whoisdat/all-data/ 中创建 allan-* 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM