在unix中删除逗号分隔文件中特定位置的字符和数字

在unix中删除逗号分隔文件中特定位置的字符和数字

我只想从 unix 中的逗号分隔文件中的特定位置删除字符和数字。

我的数据是这样的

jagan1,*,*,*,*,*,W,24,25,26
jagan2,*,*,*,*,*,1,24,25,26
jagan3,*,*,*,*,*,*,24,25,26
jagan4,*,*,*,*,*,P,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

在第七个位置,我只想保留 *,如果有任何数字和任何字符,我想删除整行。

像这样输出

jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

答案1

简单地与awk脚本:

$ awk -F, '$7 == "*"' file.csv
jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

  • -F,- 设置,(逗号)作为输入字段分隔符
  • '$7 == "*"' - 仅考虑第 7 个字段等于的行*

要删除不需要行使用以下内容sed方法:

$ sed -Ei '/^([^,]+,){6}[^*],/d' file.csv

答案2

磨坊主,使用-I就地编辑文件的选项:

mlr -I --csv --implicit-csv-header --headerless-csv-output filter '$7 == "*"' file.csv

答案3

Inin.txt是您的输入文件,并且您要将第七列中带有星号的行复制到该文件中out.txt,您可以使用以下 grep 命令:

grep -E '^(([[:alnum:]]+|[*]),){6}\*' in.txt > out.txt

说明:首先查看一行的开头 ( ^),然后是连续的六行字母数字字符或星号后跟一个逗号((([[:alnum:]]+|[*]),);{6}定义重复次数),然后检查下一个字符是否是星号。如果是,则匹配行将被复制到out.txt.

答案4

这次尝试:

sed -i -Ee 's/^.*,[a-zA-Z0-9]*,[0-9]{2},[0-9]{2},[0-9]{2}$//' file && sed -i '/^$/d' file

捕获具有格式的字符串...,<number or character>,<two numbers>,<two numbers>,<two numbers><end of line>并删除。


删除空行

'/^$/d'

相关内容