我正在运行awk
脚本:
find ~/dir/ -regextype sed -regex '.*\.[0-9]\{3\}\.txt' -exec ~/script.awk {} \;
它通过从find
找到的文件中提取数据来生成行。我希望每行前面都有一个整数来表示序列,即。第一行为1,第二行为2等。问题是awk
生成的一列中包含新的行符号\n
,即。来自awk的一行可以看起来像:
"col1" col2 "col3_\n_col3_continued_\n_more_col3" "col4"
这些行是在脚本的END
部分构建的:
END {
method=""
i=1
for (i=1;i<nm;i++) {
if (i==1) {
method=methodarr[i]
}
else {
method=method"\n"methodarr[i]
}
}
method="\""method"\""
printf "%s %s %s %s\n",date,time,method,"\""FILENAME"\""
}
这会导致显示有更多行存在文件但记录被正确分隔,因为新行符号用引号括起来。然后,生成的文本文件将作为数据导入到某些电子表格软件中,并且由撇号括起的新行分隔部分将正确放入单个单元格中。但这可以防止在每行之前添加一个简单的数字。
一个简单的解决方案是假设第一列的格式,再次将结果传递给awk
,匹配第一列格式并在行号之前。我不喜欢这种方法。是否有更简单的方法,理想情况下无需假设第一列?我猜想全局系统变量i
的某种方式会因awk
的每次运行而增加,但我不知道它是否可能或如何实现。
答案 0 :(得分:1)
我认为最简单的解决方案是在每行之前加上一个特殊的字符序列,然后用另一个AWK脚本替换它。
例如,替换您的代码:
printf "%s %s %s %s\n",date,time,method,"\""FILENAME"\""
使用:
printf "<LINE_N> %s %s %s %s\n",date,time,method,"\""FILENAME"\""
然后通过此脚本运行输出,将<LINE_N>
替换为数字:
awk '$1 == "<LINE_N>" { cnt += 1; printf cnt; $1=""; } 1;'