使用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"
3条答案
按热度按时间3vpjnl9f1#
你没有在你的问题中显示预期的输出,所以我不知道这是否正确,但它实现了你所描述的最好的,我可以告诉:
gmxoilav2#
我想解释一下你惹了谁
你不能只在
/
分隔的正则表达式中使用/
-这会混淆GNUAWK
。你应该使用转义的/
,即/
前缀为\
,所以为了输出所有带有/
的行,可以这样做或者,如果你发现这样一堆斜线令人困惑,你可以使用八进制(参见
\nnn
chapter in Escape Sequences),并执行vmjh9lq93#
如果你想超越检测斜线,而是替换它们:
假设日期格式仍然是Ymd