我有
等数据ID | Name | Grade
1|Robin Hood so hood | A
2|Gwen Stack DO Rick Stacy |C
3|Bling s/o Peter| A
如果是儿子,DO是女儿,S / O是儿子。
我注视着如何到达
ID | Name | Grade
1|Robin Hood| A
2|Gwen Stack |C
3|Bling| A
到最后,我会将这些家伙邮寄到那些我不愿意提供完整字符串的名字
我试图使用while循环,使用awk将第二个字段放入数组然后循环到数组,这是不可靠的
任何SED或AWK方法??
答案 0 :(得分:3)
您可以使用此sed命令:
sed -i.bak 's~ [sSdD]/*[oO] [^|]*~~' file
ID | Name | Grade
1|Robin Hood|A
2|Gwen Stack|C
3|Bling|A
或使用awk
:
awk -F ' [sSdD]/?[oO] [^|]*' '{print $1 $2}' file
ID | Name | Grade
1|Robin Hood|A
2|Gwen Stack|C
3|Bling|A
答案 1 :(得分:0)
SED
update.js.erb
答案 2 :(得分:0)
awk '{sub(/s\/o Peter/,"")}{sub(/d \| A/,"\ |A")}NR>1{print $1,$2, $NF}NR==1' file
ID | Name | Grade
1|Robin Hood |A
2|Gwen Stack |C
3|Bling | A
答案 3 :(得分:0)
这个答案应该直截了当,因为它使用 | 作为字段分隔符,而 sub 仅适用于第二个字段。通过在 sub <中创建正则表达式,它还确保 so , DO 和 s / o 与名称分开/ strong>考虑三者两边的空格:
awk 'BEGIN {OFS=FS="|"} sub(/ (s\/?o|DO) .*/, "", $2) + 1' file
ID | Name | Grade
1|Robin Hood| A
2|Gwen Stack|C
3|Bling| A
另一件事 - 从你问题的中间部分看,你可能想要不区分大小写。如果您有 gawk ,则可以使用 IGNORECASE 。否则,这是编辑的正则表达式。
awk 'BEGIN {OFS=FS="|"} sub(/ ([Ss]\/?|[Dd])[Oo] .*/, "", $2) + 1' file
如果你想接受不区分大小写的 D / O ,那么这是一个。
awk 'BEGIN {OFS=FS="|"} sub(/ [SsDd]\/?[Oo] .*/, "", $2) + 1' file