当两列字符串不相等时如何提取行

当两列字符串不相等时如何提取行

我有一个 CSV 文件,格式如下:

text1,text2,string1,string2
text3,text3,string3,string2
text4,text5,string1,string2
text6,text6,string6,string7

我想在column1和column2不相等时提取行。上例中的预期结果是:

text1,text2,string1,string2
text4,text5,string1,string2

当column1和column2不相等时。我熟悉允许我提取特定列的命令,如下所示以提取第一列:

cat input.csv | cut -d ',' -f1 > output.csv

答案1

假设这是一个简单的 CSV文件,没有任何花哨的逗号或换行符嵌入之内实际数据的字段,您可以使用awk以下方法:

awk -F ',' '$1 != $2' <input.csv

这是一种简写方式

awk 'BEGIN { FS = "," } $1 != $2 { print }' <input.csv

$1如果第一个和第二个字段(和$2)不相同,它将输入字段分隔符设置为逗号并打印每一行。

等效的 Perl 变体:

perl -F ',' -na -e 'print if $F[0] ne $F[1]' <input.csv

答案2

GNUsed解决方案:

sed -E '/^([^,]+,)\1/d' input.csv

输出:

text1,text2,string1,string2
text4,text5,string1,string2

答案3

$ awk -F "," '{if ($1 != $2)print $0}' filename
text1,text2,string1,string2
text4,text5,string1,string2

相关内容