Ach*_*007 4 awk text-processing
具有input.csv
如下:
field_name,field_friendly_name
LastNm,Last_Name
cntn_last_mod_wrkr_full_nm,Last_Name
contact_last_nm,Last_Name
contact_first_last_nm,Last_Name
last_english_nm,Last_Name
last_pronunciation_nm,Last_Name
last_nm,Last_Name
lead_space_last_nm,Last_Name
last_mod_usr_nm,Last_Name
lcl_last_nm,Last_Name
adobe_last_topic_nm,Last_Name
last_changed_user_nm,Last_Name
last_purchased_product_service_nm,Last_Name
last_imported_source_nm,Last_Name
submt_last_nm,Last_Name
cntct_last_nm,Last_Name
cust_submt_last_nm,Last_Name
cust_cntct_last_nm,Last_Name
last_mod_by_nm,Last_Name
last_mod_als_nm,Last_Name
last_mod_nm,Last_Name
ship_last_nm,Last_Name
billing_last_nm,Last_Name
last_upd_by_nm,Last_Name
wrkr_last_nm,Last_Name
trns_line_itm_last_chg_psn_nm,Last_Name
trns_line_itm_last_cre_psn_nm,Last_Name
trns_hdr_last_chg_psn_nm,Last_Name
altr_last_nm,Last_Name
trns_last_chg_nm,Last_Name
lastrepaction_nm,Last_Name
last_build_nm,Last_Name
LegalLastNm,Last_Name
ManagerLastNm,Last_Name
4-LastNm,Last_Name
NextLevelManagerLastNm,Last_Name
ManagerLegalLastNm,Last_Name
Run Code Online (Sandbox Code Playgroud)
从此文件中,我想在 column1 上进行过滤,其中条件为 column1 的值应由给定的一组单词组成(last, name, nm, lst, -, _, [0-9] )并排除是否包含任何也就是说。并且还将 column2 更新为“Found”。我的搜索应该不区分大小写。
LastNm,Found
last_nm,Found
4-LastNm,Found
Run Code Online (Sandbox Code Playgroud)
我正在使用这种方式不起作用:
awk -v q="'" --field-separator ',' '((tolower($1) ~ /last/) && (tolower($1) ~ /name/)) || ((tolower($1) ~ /last/) && (tolower($1) ~ /nm/)) && ($2="found") {print $1 "," $2 }' raw.csv
Run Code Online (Sandbox Code Playgroud)
使用 GNU awk
,gensub
可用于删除所有这些单词,如果为空则打印:
awk -F , -v OFS=, 'gensub(/last|lst|name|nm|[0-9_-]*/,"","g",tolower($1))=="" {
$2="found";
print $1, $2
}' file
Run Code Online (Sandbox Code Playgroud)
与sub
/不同gsub
,gensub
保留原始记录不变,而是返回结果字符串。awk
通过将字段复制到变量中,可以将相同的方法与标准一起使用。
要包含比 多的字符[0-9_-]
,您可以使用[^[:alpha:]]
(即anything that isn't a letter
):
last|lst|name|nm|[^[:alpha:]]
Run Code Online (Sandbox Code Playgroud)