2009年8月8日 星期六

刪除列(row)與刪除行(col)

用 cut 刪除行(column):
。 cut -b 10- filename //刪除該列的前10個字元
。 cut -d(分界字元) filename //指定欄位的分界字元
ex:
aaa.a的內容:
abc-a:12345678
def-b:87654321

命令:
捉取第一列的「:」前的資料
awk 'NR==1' aaa.a | cut -f 1 -d :
捉取第一列的「:」前的資料並計算個數
awk 'NR==1' aaa.a | cut -f 1 -d : | wc -m



用 sed 刪除列(row):
。 sed -e '3d' //刪除第3列
。 sed -e '2,5d' //刪除第2~5列
。 sed -e '4,$d' //刪除第4列,但第4列是最後一列;錢字號『 $ 』代表最後一行!
。 sed -e "/${var}/"d //在shell中,用變數代替
。 sed 's/^...//' //刪除該列的前3個字元
。 sed 's/...$//' //刪除該列的最後3個字元
。 sed '/Hello/d' dataf3 //刪除Hello該列
。 sed -i “s/\r//”FILENAME //刪除檔案中的^M字元


用 awk 刪除列(row):
。 awk 'NR!=3 {print $0}' //刪除第3列
。 awk '!(NR>=2 && NR<=5){print $0}' //刪除第2~5列

sed其它:
。 sed 's/要被取代的字串/新的字串/g'
ex: sed 's/*//g' //將「*」符用空白字元取代

awk其它:
。 cat test.sh | awk -F = '/Sub 1/ {print NR}' //抓test.sh的Sub 1所在的列數

ex
test.sh 內容:
(只想抓取 Sub 1所在的列數)
#! /bin/bash
Sub 1
Sub 2
Sub 11
Sub 12

命令:
cat test.sh | awk -F = '/Sub 1/ {print NR}'

結果:
1
3
4



修改:
cat test.sh | awk -F = '/Sub 1$/ {print NR}'

結果:
1

解說:
$ 為行尾字元
Sub 1$ 表示在 1 後面緊接的行尾,
也就 1 後面不會有其他字元
因為就不會抓到 Sub 11 及 Sub 12 這兩行了

另外也可以用:
awk '$0=="Sub 1" {print NR}''


ref:
1. 鳥哥
2. 程式設計俱樂部

沒有留言:

張貼留言