Awk 一次设置一个字段?

Awk 一次设置一个字段?,awk,gawk,Awk,Gawk,正在尝试将一些已删除的数据转换为以条形分隔的未删除的数据 下面是一些示例数据 asd1276vdjs12897364vsk Tue Apr 2 08:19:12 2013 [pid 3] [words] FAIL UPLOAD: Client "00.005.006.006", "/0801NSJH.bbf", 0.00Kbyte/sec 进入 正则表达式足够简单,但我不知道如何说第一个字段=regex,第二个字段=regex等等 这个sed是功能性的,但有点粗糙,我想让它在gawk中工作

正在尝试将一些已删除的数据转换为以条形分隔的未删除的数据

下面是一些示例数据

asd1276vdjs12897364vsk Tue Apr  2 08:19:12 2013 [pid 3] [words] FAIL UPLOAD: Client "00.005.006.006", "/0801NSJH.bbf", 0.00Kbyte/sec
进入

正则表达式足够简单,但我不知道如何说第一个字段=regex,第二个字段=regex等等

这个sed是功能性的,但有点粗糙,我想让它在gawk中工作

sed 's/ Sun/|Sun/'
sed 's/ Mon/|Mon/'
sed 's/ Tue/|Tue/'
sed 's/ Wed/|Wed/'
sed 's/ Thu/|Thu/'
sed 's/ Fri/|Fri/'
sed 's/ Sat/|Sat/'
sed 's/ Sun/|Sun/'
sed -e 's% \[%|\[%g' -e 's%\] %\]|%g' -e 's%, %|%g'

找到这样一个正则表达式的规则真是太难了。我去掉了正则表达式标签。这是一个关于awk/gawk的问题。这个问题的问题是没有一个好的解决方案,我可以提供一个解决方案来修复这个示例,我可能会使用
printf
来格式化输入,但我保证文件中的其他行不会与示例中的字段的格式/数量完全匹配。找到这样一个正则表达式的规则是非常困难的。我删除了正则表达式标记。这是一个关于awk/gawk的问题。这个问题的问题是没有一个好的解决方案,我可以提供一个解决方案来修复这个示例,我可能会使用
printf
来格式化输入,但我保证文件中的其他行不会与示例中字段的格式/编号完全匹配。
sed 's/ Sun/|Sun/'
sed 's/ Mon/|Mon/'
sed 's/ Tue/|Tue/'
sed 's/ Wed/|Wed/'
sed 's/ Thu/|Thu/'
sed 's/ Fri/|Fri/'
sed 's/ Sat/|Sat/'
sed 's/ Sun/|Sun/'
sed -e 's% \[%|\[%g' -e 's%\] %\]|%g' -e 's%, %|%g'
$ cat tst.awk
{ print gensub(/\
([^[:space:]]+)[[:space:]]+\
([^[]+)[[:space:]]+\
([[][^]]+[]])[[:space:]]+\
([[][^]]+[]])[[:space:]]+\
([^,]+),[[:space:]]+\
([^,]+),[[:space:]]+\
/,
"\\1|\\2|\\3|\\4|\\5|\\6|","")
}
$ awk -f tst.awk file
asd1276vdjs12897364vsk|Tue Apr  2 08:19:12 2013|[pid 3]|[words]|FAIL UPLOAD: Client "00.005.006.006"|"/0801NSJH.bbf"|0.00Kbyte/sec