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

By Valerie
at 2016-05-09T01:36
at 2016-05-09T01:36
Table of Contents
※ 引述《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
看來兩個以上還是先轉置方便一些
--
: 有一筆學生與成績資料如下, 每個字串和數字都是用空格隔開,
: 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
看來兩個以上還是先轉置方便一些
--
Tags:
Linux
All Comments

By Noah
at 2016-05-11T14:50
at 2016-05-11T14:50

By Elvira
at 2016-05-15T23:14
at 2016-05-15T23:14

By Erin
at 2016-05-19T12:26
at 2016-05-19T12:26
Related Posts
log中想把同一來源的資料分開

By Gilbert
at 2016-05-08T19:08
at 2016-05-08T19:08
請問 grep 或其他 script 做得到嗎?

By Hamiltion
at 2016-05-08T17:53
at 2016-05-08T17:53
在 Ubuntu 製作 FreeDOS 開機 USB 隨身碟

By Barb Cronin
at 2016-05-08T17:48
at 2016-05-08T17:48
Dragonbox Pyra很狂的一台Linux硬體

By Ula
at 2016-05-08T14:44
at 2016-05-08T14:44
在 32-bit UEFI BIOS 上面安裝 Ubuntu

By Todd Johnson
at 2016-05-07T13:59
at 2016-05-07T13:59