我正在尝试打印出由制表符分隔的列。
首先,我使用find
命令来识别要处理的文件列表。
其次,我解析文件路径以生成稍后使用split
.
第三,我以使用 指定的制表符分隔格式打印出我需要的几列(包括第一列由几列带下划线的组合而成)-v OFS='\t'
。
第四,我打印出输出路径和以_step3
.
INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +
我收到以下错误消息。什么地方出了错?
awk: syntax error at source line 1
context is
>>> <<<
awk: bailing out at source line 1
更新 - 根据 @glennjackman 为每个变量添加 -v 后的建议,有不同的错误消息。
INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' -v var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +
我收到以下错误消息:
awk: can't open file MAP_pv1.txt_cap.txt
source line number 1
一个附带问题,当我使用时,find "$INPUT" -type f -iname "*.txt_cap.txt"
我可以看到终端上显示的文件列表。我还能够看到使用时显示的文件"$INPUT" -type f -iname "*.txt_cap.txt"
。但是,当与第一个具有较长文件匹配模式的 awk 结合使用时,我能够获取该命令的错误消息,但在仅用.txt
作匹配模式时没有错误消息,也没有生成输出文件。有谁知道沉默行为的原因吗?
谢谢。