shell 使用AWK命令跳过第一行并确定"/“是否位于CSV文件中的特定列中,该列恰好是日期

gk7wooem  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(126)

使用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"
3vpjnl9f

3vpjnl9f1#

你没有在你的问题中显示预期的输出,所以我不知道这是否正确,但它实现了你所描述的最好的,我可以告诉:

$ 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"
gmxoilav

gmxoilav2#

我想解释一下你惹了谁

awk: cmd. line:1: {if(NR > 1) {{$11~/^//}}}
   awk: cmd. line:1:                       ^ syntax error

你不能只在/分隔的正则表达式中使用/-这会混淆GNU AWK。你应该使用转义的/,即/前缀为\,所以为了输出所有带有/的行,可以这样做

awk '/\//' file.txt

或者,如果你发现这样一堆斜线令人困惑,你可以使用八进制(参见\nnn chapter in Escape Sequences),并执行

awk '/\057/' file.txt
vmjh9lq9

vmjh9lq93#

如果你想超越检测斜线,而是替换它们:

awk 'BEGIN {FS=OFS="|"} {gsub("/", "-", $11)} 1' file

假设日期格式仍然是Ymd

相关问题