Я бы сделал
if ! ( [[ -s file1 ]] && cmp file1 file2 2>/dev/null 1>&2 )
then
echo "some text" >file1
cp file1 file2
fi
Пояснение:
-s файл1 оценивается как истина, если файл1 существует и не является пустым.
Команда cmp устанавливает код состояния 0, если оба файла существуют и идентичны.
Это тот случай, когда мы не хотим их трогать, поэтому я добавляю к этому префикс и восклицательный знак, чтобы отрицать условие.
Если вы уверены в количестве и порядке полей и кавычек в них, вы можете использовать cut -d\"
для получения необходимых полей, подобных этому:
echo 'XX_EMAIL_FILES FCP_REQID=9614696 FCP_LOGIN="APPS/sup12" FCP_USERID=5667 FCP_USERNAME="SRI" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "9614556_SUP12_XX_Workflow_Stuck_AP_Invoices.csv" "/tmp_mnt2/attachments" "Sri.B@xx.com" "This is the subject for the mail" "PFA for the list of Invoices that are stuck in workflow."' \
| cut -f14 -d\"
This is the subject for the mail
echo 'XX_EMAIL_FILES FCP_REQID=9614696 FCP_LOGIN="APPS/sup12" FCP_USERID=5667 FCP_USERNAME="SRI" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "9614556_SUP12_XX_Workflow_Stuck_AP_Invoices.csv" "/tmp_mnt2/attachments" "Sri.B@xx.com" "This is the subject for the mail" "PFA for the list of Invoices that are stuck in workflow."' \
| cut -f16 -d\"
PFA for the list of Invoices that are stuck in workflow.
Или, может быть, даже лучше использовать awk
, если вам нужно получить два последних поля:
echo 'XX_EMAIL_FILES FCP_REQID=9614696 FCP_LOGIN="APPS/sup12" FCP_USERID=5667 FCP_USERNAME="SRI" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "9614556_SUP12_XX_Workflow_Stuck_AP_Invoices.csv" "/tmp_mnt2/attachments" "Sri.B@xx.com" "This is the subject for the mail" "PFA for the list of Invoices that are stuck in workflow."' \
| awk -F\" '{ print $(NF-3) }'
This is the subject for the mail