Нужно получить только необходимую часть

Я бы сделал

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, если оба файла существуют и идентичны.

Это тот случай, когда мы не хотим их трогать, поэтому я добавляю к этому префикс и восклицательный знак, чтобы отрицать условие.

-2
14.08.2019, 09:38
1 ответ

Если вы уверены в количестве и порядке полей и кавычек в них, вы можете использовать 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
0
28.04.2021, 23:30

Теги

Похожие вопросы