我有一个像这样的csv文件:
"a", "b", "c"
"1", "b", "4"
"3", "g", "f"
只要"b"
出现在与两个连续行中的第二列值相同的位置,我想删除第二行,从而导致:
"a", "b", "c"
"3", "g", "f"
这至少让我开始解析:
awk -F "," '$1' file.csv
答案 0 :(得分:8)
只要第二列重复,就会删除一行:
$ awk -F, '$2==last{next} {last=$2} 1' file.csv
"a", "b", "c"
"3", "g", "f"
$2==last{next}
如果第二列$2
等于上一个第二列last
,则跳过此列并转到next
行。
last=$2
更新last
。
1
这是"打印线"的隐秘速记。
如果我们只想删除第二列等于"b"
的行,那就是重复上一行,那么:
awk -F, '$2==last && $2==" \"b\"" {next} {last=$2} 1' file.csv
假设我们只想每隔一次"b"
删除行:
awk -F, '$2==last && $2==" \"b\"" {last="";next} {last=$2} 1' file.csv
假设我们想跳过第"b"
个第二列的任何一行,如果它后跟一行具有相同的第二列。然后:
awk -F, '$2==last && $2==" \"b\"" {line=$0;next} NR>1{print line} {last=$2;line=$0} END{print line}' file.csv
答案 1 :(得分:0)
试试这个:
awk -F', ' 'BEGIN{OFS=FS} {
if ($2 == "\"b\"") {
if (!var) {
print
var=1
} else {
var=""
}
} else {
print
var=""
}
}' files.csv