这是我的问题。我有一个 .csv 文件 (Current.csv) 的问题,因为在数据中随机放置逗号,因此 awk 处理文件不会为我提供我正在寻找的特定类型信息的固定列号。幸运的是,我意识到此信息始终是日期格式 (m,mm)/(d,dd)/yy 的第三个实例。因此,我尝试使用下面的正则表达式仅显示第 i 行中的日期:
awk -F',' '{if (NR==$i)print}' Current.csv | grep -o "[0-9]{1,2}/[0-9]{1-2}/[0-9]{1,2}" | echo
到目前为止它什么都没显示,我完全不知道为什么。我猜要显示第三个,只需将这一切输入到:
awk {print $3}
对 awk 的正则表达式搜索问题有什么想法吗?
示例行
“lettershere”,numbershere,“retardedbrokenquoteshere,mm/dd/yy,morestuff,mm/dd/yy,numbers,mm/dd/yy
答案1
假设 CSV 文件有效(即包含逗号的字段被引号括起来),您应该使用一些实际上将其解析为 CSV 的东西。以下简单的 Python 脚本将提取每行的第二列。
python -c 'import csv; import sys; [sys.stdout.write(row[1]+"\n") for row in csv.reader(sys.stdin)]'
答案2
i 未设置,因此默认为零,并且在任何情况下你的意思是 i 而不是 $i。
您需要 grep -E 来扩展正则表达式。
月份字段中的 {1-2} 应为 {1,2},并且正斜杠应由反斜杠保护。
通过管道传输到 echo 将会丢失任何输出,因为它不是一个过滤器,并且在任何情况下都不需要。
正如 mgorven 所建议的,使用处理 csv 的不同方法。