awk - 命令当文件没有记录时如何处理

时间:2016-06-20 02:09:21

标签: bash csv awk

我有awk命令,用于比较两个csv文件,如果找到记录,则将文件附加一个文件中的值并创建一个新文件。它可以正常工作,并在两个文件都有记录时给出预期输出。但是当其中一个文件为空时没有得到所需的结果。如何处理空文件并获得所需的输出

我的脚本是

    #!/bin/ksh
set -x
#dos2unix $SCRIPT_HOME/input/declined/file1.csv $SCRIPT_HOME/input/declined/file1.csv
/usr/xpg4/bin/awk 'BEGIN{FS=OFS="|"} FNR==NR {a[$2]=$1 ;b[$15]=$15;c[17]=substr($17,1,1);next;}
{
print $12;
if($12 in b){
print $0,a[$17],c[17];
}

else {
{print $0}}

}' $SCRIPT_HOME/input/declined/declined.csv $SCRIPT_HOME/input/declined/file2.csv >  $SCRIPT_HOME/input/error/file2.csv

在我的情况下,当文件rejected.csv为空时,我只想打印出file2.csv记录。

2 个答案:

答案 0 :(得分:2)

变化:

FNR==NR

为:

FILENAME==ARGV[1]

答案 1 :(得分:-2)

我使用了选项[ ! -s $SCRIPT_HOME/input/declined/declined.csv ] || 验证文件是否为空。

[ ! -s $SCRIPT_HOME/input/declined/declined.csv ] ||
/usr/xpg4/bin/awk 'BEGIN{FS=OFS="|"} FNR==NR {a[$2]=$1 ;b[$15]=$15;c[17]=substr($17,1,1);next;}
{
print $12;
if($12 in b){
print $0,a[$17],c[17];
}

else {
{print $0}}
}' $SCRIPT_HOME/input/declined/declined.csv $SCRIPT_HOME/input/declined/file2.csv >  $SCRIPT_HOME/input/error/filea2.csv

[ -s $SCRIPT_HOME/input/declined/declined.csv ] ||
{
print " i am here executing";
cp $SCRIPT_HOME/input/declined/file2.csv $SCRIPT_HOME/input/error/file2.csv