使用AWK命令跳过第一行,并确定特定列中是否有一个’/’,而这个列恰好是CSV文件中的一个日期
问题描述
使用AWK命令跳过第一行,并确定特定列中是否有一个’/’,而这个列恰好是CSV文件中的一个日期,尽管根据我的要求,日期字段必须只能以’YYYY-MM-DD’的格式而不能包含斜杠。
这是我目前拥有的代码,但我无法使其识别日期字段(第11列)中的斜杠,并将其视为无效并输出相应记录。
我不是一位有经验的脚本编写者,请帮忙 🙂
awk -F \| '{if(NR > 1) {{11~/[/]/}}}'datadir/sys_slate_app_test.csv > "invalid_other.txt"
awk: fatal: cannot open file `/sys_slate_app_test.csv' for reading (No such file or directory)
awk -F \| '{if(NR > 1) {{11~/^//}}}'datadir/sys_slate_app_test.csv > "invalid_other.txt"
awk: cmd. line:1: {if(NR > 1) {{$11~/^//}}}
awk: cmd. line:1: ^ syntax error
数据:
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022/08/23"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022/09/10"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"email32[email protected]"|"2022-08-23"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022-06-11"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022/08/23"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
解决方案
你在问题中没有展示预期输出,所以我不知道这个是否正确,但这是我所能理解并实施的最佳方案:
$ awk -F'|' '(NR > 1) && ($11 ~ "/")' file
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022/09/10"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"
"30"|"958433018"|"999999999"|"11111111"|"202340"|""|"222222222"|"Tyler"|"Ward"|"[email protected]"|"2022/08/23"|"UG"|"TR"|"0"|"0"|"0"|"2"|"1"|"RD"|"0"|"1"|"2023-03-09"