我有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记录。
答案 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