我有一个像这样的csv文件:
"a", "b", "c"
"1", "b", "4"
"3", "g", "f"
Run Code Online (Sandbox Code Playgroud)
无论何处"b"出现在与两个连续行中的第二列值相同的位置,我想删除第二行,从而导致:
"a", "b", "c"
"3", "g", "f"
Run Code Online (Sandbox Code Playgroud)
这至少让我开始解析:
awk -F "," '$1' file.csv
Run Code Online (Sandbox Code Playgroud)
这会在第二列重复时删除一行:
$ awk -F, '$2==last{next} {last=$2} 1' file.csv
"a", "b", "c"
"3", "g", "f"
Run Code Online (Sandbox Code Playgroud)
$2==last{next}
如果第二列,$2等于前一个第二列last,则跳过此并转到该next行.
last=$2
更新值last.
1
这是"打印线"的神秘简写.
如果我们只想删除第二列等于"b"前一行重复的行,则:
awk -F, '$2==last && $2==" \"b\"" {next} {last=$2} 1' file.csv
Run Code Online (Sandbox Code Playgroud)
假设我们只想删除每隔一次出现的行"b":
awk -F, '$2==last && $2==" \"b\"" {last="";next} {last=$2} 1' file.csv
Run Code Online (Sandbox Code Playgroud)
假设我们想要跳过第二列的任何行,"b"如果它后跟一行具有相同的第二列.然后:
awk -F, '$2==last && $2==" \"b\"" {line=$0;next} NR>1{print line} {last=$2;line=$0} END{print line}' file.csv
Run Code Online (Sandbox Code Playgroud)