我只想从 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'