Awk
當您擁有的唯一資訊是該位置時,在特定位置找到一個值
我有一個大約 16,000 行長的 csv 文件,有兩個欄位。第一個欄位包含數值列表,第二個欄位包含由分號分隔的名字和名稱列表,例如
3, Jack Mackie; Hanna Jones; Mike Freeland; Ollie Downs; Farrah Anderson; Judy John 9, Jewel Woodley; Jean Sullivan; Marcia Robin; Kerry Morton; Joelle Armour; Zakiya Pulwarty; Karen Thornhill; Shurm Ahmet; Ed Aslan; Adam Condell; Zeliha Manners; Joan Johnson 5, Haydn Smart; Andre Henry; Tamara Brownbill; Kelly Withers; Eden Anderson; Naomi Casa; Azaria Amritt; Jamile Newton; Nabahe Durand
第二個欄位中列出的名稱對應於第一個欄位中的數字位置,是團隊負責人,例如,第一行的團隊負責人是 Mike Freeland(位置 3),第二行是 Ed Aslan(位置 9),第三排是 Eden Anderson(第 5 位)。我需要提取所有團隊負責人的姓名。
我正在嘗試編寫一個 shell 腳本來提取團隊負責人的所有姓名,針對我的 csv 文件執行它,然後將其輸出到一個新文件。
我一直在研究如何使用“grep”或“awk”加“FS”(FS 指定分號作為分隔符而不是空格)來查找資訊,但我不知道如何合併值在第一個欄位中作為選擇標準。我見過的每個範例都使用這些命令來搜尋已知值或字元串。但是,在這種情況下,我只知道值的位置(名字和姓氏)。我在看正確的命令嗎?
我一直無法想出一個腳本。如何提取團隊負責人的姓名?
$ awk -F, '{split($2,names,";"); print names[$1]}' file.csv Mike Freeland Ed Aslan Eden Anderson
$ awk -F'[,;] ' '{print $($1 + 1)}' file Mike Freeland Ed Aslan Eden Anderson
將欄位分隔符更改為
'[,;] '
,即逗號或分號後跟空格字元。然後獲取第一個欄位的值$1
,向其中添加一個並列印該欄位的值$(...)
。