作業中遇到的資料很多都是按照欄位進行組織的,分隔符通常是制表符\t,如下所示:
seg_A seg_B seg_C
...
...
...
這種格式可以組織各種資料,比如日志檔案,訓練/測驗資料,用戶行為資料等,這些資料都是字串的形式,并且按照每行一個樣本,每列一個欄位的形式進行儲存,linux中有很多工具和命令處理此類資料非常方便,這里簡單筆記下,
列印某一列
采用awk可以做到,
cat your_file | awk '{print $1}' # 列印第一列
cat your_file | awk '{print $NF}' # 列印最后一列
查找字串
采用sed, grep ,大殺器awk當然也可,不過沒必要,
cat your_file | sed -n '/string_pattern/p'
cat your_file | grep "your_string"
cat your_file | grep -E "string_pattern"
新增一列
采用awk, 假如原本的檔案如:
# file: your_file
1 2 3
4 5 6
7 8 9
那么在最后一列添加上字符A,可以用以下腳本
cat your_file | awk '
BEGIN{string="A"}
{
for(i=0; i<=NF; i++)
{
printf($i);
printf("\t");
}
printf("%s\n", a);
}'
其輸出結果是:
1 2 3 A
4 5 6 A
7 8 9 A
我們發現awk的可執行代碼非常類似于C語言,并且awk是對每一行為單位進行處理的,這意味著以上的代碼會對檔案中的每一行進行相同的操作,
替換字串
替代字串這個操作可以由非常多的工具進行,比如sed, tr, 萬能的awk等,個人喜歡用sed,
cat your_file | sed -n 's/old_string/new_string/p'
大小寫字母轉換
tr命令適合用于字串的轉換,壓縮和洗掉,
echo "AbC" | tr -t [A-Z] [a-z]
輸出為abc
資料篩選
有時候需要對每一列的某些數值指標(離散的或者連續的)進行篩選,可以采用awk輕松搞定,原資料如:
# file: your_file
data_a data_b 1.0
data_a data_b 0.5
data_a data_b 0.8
data_a data_b 0.3
data_a data_b None
那么挑選所有最后一列大于0.5的行,可以
cat your_file | awk '$3>0.5'
輸出為:
data_a data_b 1.0
data_a data_b 0.8
data_a data_b None
為了篩出掉預設值None,也可以選擇同時篩選多個條件,通過與(&&)或(||)非(!)連接起來,如下面的第一條
cat your_file | awk '$3>0.5 && $3!="None"'
cat your_file | awk '$3>0.5 && $3<0.8'
cat your_file | awk '$3<0.5 || $3>0.8'
cat your_file | awk '$3!=0'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300450.html
標籤:其他
上一篇:基于Rdisson實作延時佇列,解決支付延時查單、關單方案
下一篇:DOS命令關機小程式
