How to fix Bad File descriptor in a Sed Command in unix

sandeep

I have a source file that has all many group numbers (assume its a key field) with related data. I am using awk and sed command to create separate files based on the group number found in the source file.

I am doing like below. My Output is as expected but am getting below warning when running the command.

sed: couldn't close stdout: Bad file descriptor

Code:

awk -F, '{print  $2FS$3FS$6FS$4FS$43FS$44FS$5FS$7FS$8FS$9FS$10FS$11FS$12FS$13FS$14FS$15FS$16FS$17FS$18FS$19FS$20FS$21FS$22FS$23FS$24FS$25FS$26FS$27FS$28FS$29FS$30FS$31FS$32FS$33FS$34FS$35FS$36FS$37FS$38FS$39FS$40FS$41FS$42FS$45> $1 }'
for i in *.csv; do
    sed -i -e  "1 i\RECORD_TYPE,GROUP_NO,ACCOUNT_NO,EMPLOYEE_SSN,CARS_ERROR_CODE,CARS_ERROR_DESC,NEW_PARTICIPANT_ID,DEPENDENT_SSN,EFFECTIVE_DATE,DEPENDENT_SEQ_NO,LAST_NAME,FIRST_NAME,MIDDLE_INITIAL,ADDRESS_LINE_1,ADDRESS_LINE_2,ADDRESS_LINE_3,CITY,STATE,ZIPCODE,RELATIONSHIP_CODE,DATE_OF_BIRTH,SEX_CODE,SMOKER_INDICATOR,HIRE_DATE,LOCATION_NO,LOCATION_DATE,REPORTED_SALARY,SALARY_MODE,SALARY_EFFECTIVE_DATE,WEEKLY_HOURS,PRODUCT_ID,TERMINATION_DATE,TERM_REASON_CODE,COVERAGE_OPTION,PLAN_CODE,UNITS,PRODUCT_SET_ID,UNDERWRITING_STATUS_IND,APPLICATION_RECEIVED_DATE,CERTIFICATE_NO,STATUS_TYPE,FILE_ID,FILE_DATE,CARS_DATE"  $i
done
tripleee

Why do you not simply print the header from the Awk script when you create a new file?

awk -F, 'BEGIN { OFS=FS }
{ if (!a[$1]++)
    print "RECORD_TYPE", "GROUP_NO", "ACCOUNT_NO", "EMPLOYEE_SSN", \
     "CARS_ERROR_CODE", "CARS_ERROR_DESC", "NEW_PARTICIPANT_ID", \
     "DEPENDENT_SSN", "EFFECTIVE_DATE", "DEPENDENT_SEQ_NO", \
     "LAST_NAME", "FIRST_NAME", "MIDDLE_INITIAL", "ADDRESS_LINE_1", \
     "ADDRESS_LINE_2", "ADDRESS_LINE_3", "CITY", "STATE", "ZIPCODE", \
     "RELATIONSHIP_CODE", "DATE_OF_BIRTH", "SEX_CODE", "SMOKER_INDICATOR", \
     "HIRE_DATE", "LOCATION_NO", "LOCATION_DATE", "REPORTED_SALARY", \
     "SALARY_MODE", "SALARY_EFFECTIVE_DATE", "WEEKLY_HOURS", "PRODUCT_ID", \
     "TERMINATION_DATE", "TERM_REASON_CODE", "COVERAGE_OPTION", "PLAN_CODE", \
     "UNITS", "PRODUCT_SET_ID", "UNDERWRITING_STATUS_IND", \
     "APPLICATION_RECEIVED_DATE", "CERTIFICATE_NO", \
     "STATUS_TYPE", "FILE_ID", "FILE_DATE", "CARS_DATE" >$1
  print $2, $3, $6, $4, $43, $44, $5, $7, $8, $9, $10, $11, $12, \
    $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, \
    $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, \
    $36, $37, $38, $39, $40, $41, $42, $45> $1 }'

Perhaps notice also the OFS=FS so you can use a simple comma instead of FS.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related