这是我的文本文件的摘录
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的日期将被截取。
任何帮助都将不胜感激。
Note代码在这里https://ideone.com/JbuRHK
预期产出将是:
namq_aux_lp 07.07.2014
namq_aux_ulc 08.07.2014
...
assei_bsrt_m_r2 26.06.2014
...发布于 2014-07-22 12:08:12
只需查找从第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最后更新数据“的每一侧的第一个内容:
$ 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发布于 2014-07-22 11:12:08
以下是一些可能有效的方法:
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发布于 2014-07-22 11:19:34
您可以使用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]。https://stackoverflow.com/questions/24885664
复制相似问题