Chinaunix

标题: 请教高难度 shell脚本 搞定加微信发红包奖励 [打印本页]

作者: xin2v    时间: 2018-12-08 10:43
标题: 请教高难度 shell脚本 搞定加微信发红包奖励


A 表格如下  第22列 第23列(红色为22列)

"232"|"1er"|"eqw"|.......|"OTH"|"WY"|"rr"
"222"|"e6r"|"wqw"|.......|"Citizen"|"WY"|"rr"
"222"|"1er"|"eqw"|.......|"Dual_Citizen"|"WY"|"rr"
"212"|"eer"|"wqw"|.......|"Resident"|"WY"|"rr"
"252"|"e2r"|"eqw"|.......|""|"WY"|"rr"
"252"|"e2r"|"eqw"|.......|"WQC"|"WY"|"rr"

只保留23列 保留规则如下
如果22列的值是  "OTH" 或者 "Resident" 其对应的23列的值保持不变
如果22列的值是  "Citizen"或者"Dual_Citizen" 其对应的23列的值替换为 "US"
如果22列的值 为空 "" 其对应的23列的值替换为 "DKK_US"
如果22列的值 不为空 也不是上面 四个值 其删除改行


改后效果如下

"232"|"1er"|"eqw"|.......|"WY"|"rr"
"222"|"e6r"|"wqw"|.......|"US"|"rr"
"222"|"1er"|"eqw"|.......|"US"|"rr"
"212"|"eer"|"wqw"|.......|"WY"|"rr"
"252"|"e2r"|"eqw"|.......|"DKK_US"|"rr"


哪个大神 搞定的话  请留下 微信号   


作者: cfwyy    时间: 2018-12-10 11:05
  1. gawk 'BEGIN{FS=OFS="|"}$22 ~"Citizen"{$23="\"US\""} $4~ "\"\""{$23="\"DKK_US\""} $22 ~"OTH|Resident|Citizen|\"\""{print $0}' A.txt
复制代码

试试看。
作者: wh7211    时间: 2018-12-10 12:23
本帖最后由 wh7211 于 2018-12-10 19:47 编辑

回复 1# xin2v

  1. awk 'BEGIN{FS=OFS="|"}{if($22~"OTH|Resident"){NF=NF}else if($22~"Citizen|Dual_Citizen"){$23="\042US\042"}else if($22~"\042\042"){$23="\042DKK_US\042"}else{next}}1' A
复制代码

作者: 本友会机友会摄友会    时间: 2018-12-10 17:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: 本友会机友会摄友会    时间: 2018-12-11 12:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: xin2v    时间: 2018-12-11 13:28
本友会机友会摄友会 发表于 2018-12-11 12:28
1 这个不难。
2
======================================================

大哥 是LINUX 服务器啊

作者: xin2v    时间: 2019-01-03 17:30
回复 2# cfwyy

如果需求变了原来是
如果22列的值 不为空 也不是上面 四个值 其删除改行
现在是不删除  该如何处理 ?

作者: xin2v    时间: 2019-01-03 17:32
wh7211 发表于 2018-12-10 12:23
回复 1# xin2v

如果需求变了原来是
如果22列的值 不为空 也不是上面 四个值 其删除改行
现在是不删除  该如何处理 ?

作者: xin2v    时间: 2019-01-03 17:42
awk 'BEGIN{FS=OFS="|"}{if($4~"OTH|Resident"){NF=NF}else if($4~"Citizen|Dual_Citizen"){$5="\042US\042"}else if($4~"\042\042"){$5="\042DKK_US\042"}}1' A

想通了 谢谢
作者: RG_INPUT    时间: 2019-04-12 09:56

作者: nuclearxin    时间: 2019-04-12 13:42
  1. BEGIN {
  2. FS="|"
  3. OFS="|"
  4. dictx_str="OTH,Citizen,Dual_Citizen,Resident,"

  5. split(dictx_str,dictx_arr,",")
  6.   for(i in dictx_arr){
  7.     key_["\""dictx_arr[i]"\""]=1
  8.   }
  9. #  for(i in key_)print i
  10. }


  11. func process_l()
  12. {
  13.   if(($5~/^.Citizen.$/) || ($5~/^.Dual_Citizen.$/)){
  14.     $6="\"US\""
  15.     print
  16.     return
  17.   }
  18.   if ($5~/^..$/){
  19.     $6="\"DKK_US\""
  20.     print
  21.     return
  22.   }
  23.   if ($5 in key_){
  24.     print
  25.     return
  26.   }
  27. }

  28. {
  29. process_l()
  30. }
复制代码

我去, 我竟然写这个东西了 呵呵
awk -f   thisfile  /url 运行
作者: f_cook    时间: 2021-07-16 17:10
  1. perl -F'\|' -ane 'if($F[4]=~/^\"OTH\"$|^\"Resident\"$/){pass}elsif($F[4]=~/^\"Citizen\"$|^\"Dual_Citizen\"$/){$F[5]="\"US\""}elsif($F[4]=~/^\"\"$/){$F[5]="\"DKK_US\""}else{@F=()};splice(@F, 4, 1);for($i=0;$i<scalar(@F);$i++){if($i eq scalar(@F)-1){print "@F[$i]"}else{print "@F[$i]|"}}' A
复制代码

作者: howardvictor    时间: 2023-03-08 17:24
帮不上忙,顶一下!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2