Shell

如何在 CSV 文件中追加新行並在 Unix 中修改它們

  • December 24, 2021

我一般是 Unix 新手,開始學習 shell 腳本。我正在使用具有以下範例行的 CSV 文件(這是一個大型 CSV 文件,每個項目有 4 個條目):

Table 1
Item ID   Time                  Available   Location 
0001      02/02/2021  08:00     Y           NJ
0001      02/02/2021  09:00     N           UT
0001      02/02/2021  10:00     Y           AZ
0001      02/02/2021  11:00     Y           CA
0002      02/02/2021  08:00     Y           NJ
0002      02/02/2021  09:00     N           UT
0002      02/02/2021  10:00     Y           AZ
0002      02/02/2021  11:00     Y           CA      

我有另一個帶有一堆項目 ID 的 CSV,如下所示:

Table 2
Item ID   Item_Name   Item_Aux_ID    Item_Aux_name
1001      IT_1        3323           IT_Aux_1
1002      IT_2        3325           IT_Aux_2
1003      IT_3        3328           IT_Aux_3
1010      IT_4        3333           IT_Aux_4

我想在第一個 CSV 文件中創建新條目(第二個 CSV 文件中的每個項目都有一個條目)。每個新條目應與 Table1 的第一行相同,並適當替換了 Item ID。預期的輸出將是:

Table 1
Item ID   Time                  Available   Location 
0001      02/02/2021  08:00     Y           NJ
0001      02/02/2021  09:00     N           UT
0001      02/02/2021  10:00     Y           AZ
0001      02/02/2021  11:00     Y           CA
0002      02/02/2021  08:00     Y           NJ
0002      02/02/2021  09:00     N           UT
0002      02/02/2021  10:00     Y           AZ
0002      02/02/2021  11:00     Y           CA  
1001      02/02/2021  08:00     Y           NJ
1002      02/02/2021  08:00     Y           NJ
1003      02/02/2021  08:00     Y           NJ
1010      02/02/2021  08:00     Y           NJ 

如何在 Unix 中編寫腳本來實現上述功能?提前致謝。

嘗試這個; 閱讀邏輯評論

awk '
NR==2           {SV = $0                # save the relevant info from file1
                RG = $1
               }
NR != FNR       {if (FNR==1) next       # in new file: skip header
                sub(RG, $1, SV)        # insert new "item ID" in saved line
                RG = $1                # save new search pattern
                sub($0, SV)            # replace input line with modified saved line   
               }
1                                       # print it
' file[12] 
Item ID   Time                  Available   Location 
0001      02/02/2021  08:00     Y           NJ
0001      02/02/2021  09:00     N           UT
0001      02/02/2021  10:00     Y           AZ
0001      02/02/2021  11:00     Y           CA
0002      02/02/2021  08:00     Y           NJ
0002      02/02/2021  09:00     N           UT
0002      02/02/2021  10:00     Y           AZ
0002      02/02/2021  11:00     Y           CA
1001      02/02/2021  08:00     Y           NJ
1002      02/02/2021  08:00     Y           NJ
1003      02/02/2021  08:00     Y           NJ
1010      02/02/2021  08:00     Y           NJ

引用自:https://unix.stackexchange.com/questions/683678