簡體   English   中英

在列范圍之間制作awk的問題

[英]Problems making an awk between range of columns

我有一個名為sds的文件

$head sds
2557 386 fs://name/user/hive/ware/doc1/do_fact/date=20190313/fact=6
2593 393 fs://name/user/hive/ware/toc1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/user/hive/ware/dac2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/user/hive/ware/tec2/do_des/mes=25
340  332 fs://name/user/hive/ware/dc1/venta/year=2018/month=12

我想刪除/user/hive/ware並使用awk替換$7 ~ /_1$ 1other $7 for 2

我使用的代碼是:

awk -F"/" '{ if ($7 ~ /_1$/)
print $1"//"$3"/1/"$7-$NF
else
print $1"//"$3"/2/"$7-$NF}' sds

但結果很糟糕。

我想和輸出像:

2557 386 fs://name/1/do_fact/date=20190313/fact=6
2593 393 fs://name/1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/2/do_des/mes=25
340  332 fs://name/1/venta/year=2018/month=12

您可以使用awk及其gsub函數在所選列上執行替換。

 awk 'BEGIN{FS=OFS="/"}{gsub("user/hive/ware/","");gsub(/^[^12]+/,"",$4)}1' inputfile
2557 386 fs://name/1/do_fact/date=20190313/fact=6
2593 393 fs://name/1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/2/do_des/mes=25
340  332 fs://name/1/venta/year=2018/month=12
$ awk 'BEGIN{FS=OFS="/"} {sub("/user/hive/ware",""); $4=($4~/1$/ ? 1 : 2)} 1' file
2557 386 fs://name/1/do_fact/date=20190313/fact=6
2593 393 fs://name/1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/2/do_des/mes=25
340  332 fs://name/1/venta/year=2018/month=12

或者,如果你真的不想刪除字符串/user/hive/share ,而是想刪除第4到第6個字段,無論它們的值如何:

$ awk 'BEGIN{FS=OFS="/"} {$4=$5=$6="\n"; sub(/(\/\n){3}/,""); $4=($4~/1$/ ? 1 : 2)} 1' file
2557 386 fs://name/1/do_fact/date=20190313/fact=6
2593 393 fs://name/1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/2/do_des/mes=25
340  332 fs://name/1/venta/year=2018/month=12

sed

$ sed -E 's_/user/hive/ware/[^/]+(.)/_/\1/_' file

2557 386 fs://name/1/do_fact/date=20190313/fact=6
2593 393 fs://name/1/do_gas/idi_centr=6372/mes=20
2594 343 fs://name/2/do_gas2/idi_centr=6354/mes=21
349  307 fs://name/2/do_des/mes=25
340  332 fs://name/1/venta/year=2018/month=12

這不是一個有條件的替代品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM