簡體   English   中英

awk - 命令當文件沒有記錄時如何處理

[英]awk - command how to handle when file has no records

我有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記錄。

更改:

FNR==NR

至:

FILENAME==ARGV[1]

我用了選項[ ! -s $SCRIPT_HOME/input/declined/declined.csv ] || [ ! -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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM