我有一个 csv 文件,其中包含以下内容:
abc;!!!!;22
abc;!!!!;23
23;!!!!!;22
现在我想删除第三列中包含 23 的每一行。
因为第一个有可能是23。它应该只检查第三列中的匹配项。
我更喜欢 awk 解决方案,因为我真的很想学习它,但如果有人能告诉我如何使用 sed 做到这一点,我会印象深刻!
它应该与我的这个坏例子类似。
awk -F ";" (if $3="23") delete Line
答案1
另一种变体是“如果 $3 与 23 不同,则打印它”
awk -F';' '$3 != 23' file
答案2
对您的方法进行轻微修改可能已经有效(未经测试):
awk -F ";" '$3 ~ /23/ {next} 1' file
“包含”的意思是“有,除其他外”。如果您的意思是“等于”,请使用==
运算符。
答案3
与 sed
sed '/;23$/d' infile
如果可以有超过 3 列
sed '/\([^;]*;\)\{2\}23\(;\|$\)/d' infile
或者使用 ERE
sed -E '/([^;]*;){2}23(;|$)/d' infile