Text-Processing

當兩列字元串不相等時如何提取行

  • April 22, 2022

我有一個看起來像這種格式的 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

假設這是一個簡單的 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

GNU**sed**解決方案:

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

輸出:

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

引用自:https://unix.stackexchange.com/questions/484025