Re: 請問 grep 或其他 script 做得到嗎?

看板Linux作者 (Rickie Yang)時間8年前 (2016/05/09 01:36), 8年前編輯推噓0(003)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《heyk1 (大熱天)》之銘言: : 有一筆學生與成績資料如下, 每個字串和數字都是用空格隔開, : xq gg hd ws ki : Jahn amber benson kilo May : 35 26 08 21 11 : 99 76 73 86 32 : 90 51 89 55 80 : 想要用搜尋找到 benson 還有 May 的特定學生關鍵字, : 然後把 benson 和 Mar 相對應底下第2, 3 行(固定特定行數)的數字取出來, : 變成 : benson May : 08 11 : 73 32 : 存成新檔, : 請問這樣要有辦法寫嗎? : 謝謝. : : -- : → heyk1: 轉置看起來很棒, 能否請在詳細束束一下作法? 05/08 19:27 : → heyk1: 位置3 和 5 的數字, 有沒有辦法靠程式自動判斷, 搜尋得到? 05/08 19:28 : → heyk1: 因為學生名字關鍵字會改變. 謝謝. 05/08 19:29 行列轉置 google 一下應該有一些可以參考. 不確定學生是一次會搜尋好幾個? 還是一次只會找一個? 不用行列轉置: Rickie MBPr:0 rickie$ cat go.awk (NR==1){ for ( i =1 ; i <= NF ; i++ ){ if ( $i == name ){ target=i; break; } } print $target; } (NR==2)||(NR==3){print $target;} Rickie MBPr:0 rickie$ awk -f go.awk name="benson" data.txt benson 08 73 兩個, 不轉置. Rickie MBPr:0 rickie$ cat go.awk (NR==1){ for ( i =1 ; i <= NF ; i++ ){ if ( $i == name1 ){ target1=i; } if ( $i == name2 ){ target2=i; } } printf("%s\t%s\n", $target1, $target2); } (NR==2)||(NR==3){ printf("%s\t%s\n", $target1, $target2);} Rickie MBPr:0 rickie$ awk -f go.awk name1="benson" name2="May" data.txt benson May 08 11 73 32 看來兩個以上還是先轉置方便一些 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.222.17.107 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1462728967.A.405.html ※ 編輯: rickieyang (203.222.17.107), 05/09/2016 01:37:07

05/09 01:39, , 1F
好像沒考慮到找不到名字的狀況, 找不到會印出整行...
05/09 01:39, 1F

05/09 06:29, , 2F
兩個一樣名字的狀況也沒有處理
05/09 06:29, 2F

05/14 00:48, , 3F
學生一次會找兩三個 把它們各科的成績節取出來另存檔
05/14 00:48, 3F
文章代碼(AID): #1NBta7G5 (Linux)
文章代碼(AID): #1NBta7G5 (Linux)