[英]data cleaning and formatting with awk or sed
這是我的文本文件的摘錄
namq_aux_lp 4 Last update of data 07.07.2014 t
namq_aux_ulc 4 Last update of data 08.07.2014
namq_aux_gph 4 Last update of data 07.07.2014
prc_hicp_cann 4 Last update of data 17.07.2014
namq_nace10_k 4 Last update of data 02.07.2014 clas
sei_bsco_m 4 Last update of data 10.06.2014
ei_bsin_m_r2 4 Last update of data 26.06.2014
lassei_bsbu_m_r2 4 Last update of data 26.06.2014
assei_bsrt_m_r2 4 Last update of data 26.06.2014 t
ei_bssi_m_r2 4 Last update of data 26.06.2014 t
ei_bsse_m_r2 4 Last update of data 26.06.2014
ei_bsci_m_r2 4 Last update of data 26.06.2014
10 sts_trtu_m 4 Last update of data 17.07.2014 c
我正在嘗試對其進行格式化和清理,將其保留在第一列和日期中。 但是,如您所見,最后一行是10。 我無法刪除它,因為如果這樣做, sei_bsco_m
的日期將被截肢。
任何幫助,將不勝感激。
注釋代碼在這里https://ideone.com/JbuRHK
所需的輸出將是:
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
...
assei_bsrt_m_r2 26.06.2014
...
只需從第7個字段中查找每行的第一個日期,然后打印並加上第6個上一個字段:
$ awk '{
for (i=7;i<=NF;i++)
if ($i ~ /^([[:digit:]]{2}\.){2}[[:digit:]]{4}$/) {
printf "%-20s%10s\n", $(i-6), $i
next
}
}' file
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
上面的內容並不關心您可能有多少個前導或尾隨的不希望字段,或者這些字段可能包含什么,只要您沒有7個前導不希望出現的字段(第7個為日期)即可!
另外,這僅打印字符串“ 4 Last update of data”的每一側的第一行:
$ awk -F'[[:space:]]+[[:digit:]]+ Last update of data[[:space:]]+' '{
sub(/.*[[:space:]]/,"",$1)
sub(/[[:space:]].*$/,"",$2)
printf "%-20s%10s\n", $1, $2
}' file
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
以下是一些可行的方法:
awk '/^10/ {$1=""}1' file | column -t
namq_aux_lp 4 Last update of data 07.07.2014 t
namq_aux_ulc 4 Last update of data 08.07.2014
namq_aux_gph 4 Last update of data 07.07.2014
prc_hicp_cann 4 Last update of data 17.07.2014
namq_nace10_k 4 Last update of data 02.07.2014 clas
sei_bsco_m 4 Last update of data 10.06.2014
ei_bsin_m_r2 4 Last update of data 26.06.2014
lassei_bsbu_m_r2 4 Last update of data 26.06.2014
assei_bsrt_m_r2 4 Last update of data 26.06.2014 t
ei_bssi_m_r2 4 Last update of data 26.06.2014 t
ei_bsse_m_r2 4 Last update of data 26.06.2014
ei_bsci_m_r2 4 Last update of data 26.06.2014
sts_trtu_m 4 Last update of data 17.07.2014 c
或獲取您的輸出:
awk '/^10/ {$1=""}1' file | awk '{print $1,$7}' OFS="\t"
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
或像這樣:
awk '/^10/ {$1=""}1' file | awk '{print $1,$7}' | column -t
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
您可以使用sed
和column
:
sed -nr 's|.*\b(\S+_\S+)\b.*\b([0-9]+[.][0-9]+[.][0-9]+)\b.*|\1\t\2|p' file | column -t
輸出:
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
注意:
_
的內容。 \\S
可能不起作用,因此您也可以在其上考慮[^[:space:]]
或[^ \\t\\r]
。 另一個解決方案可能是:
-刪除前兩個數字
-刪除空間
-將帶有選項卡的列1和7打印為OFS(輸出字段分隔符)
$ sed 's/^[0-9][0-9]//' telecharge.txt | sed 's/ //' | awk '{print $1,$7}' OFS='\t'
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
namq_aux_gph 07.07.2014
prc_hicp_cann 17.07.2014
namq_nace10_k 02.07.2014
sei_bsco_m 10.06.2014
ei_bsin_m_r2 26.06.2014
lassei_bsbu_m_r2 26.06.2014
assei_bsrt_m_r2 26.06.2014
ei_bssi_m_r2 26.06.2014
ei_bsse_m_r2 26.06.2014
ei_bsci_m_r2 26.06.2014
sts_trtu_m 17.07.2014
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.