awk 使用 find execdir 打印制表符分隔的列

awk 使用 find execdir 打印制表符分隔的列

我正在尝试打印出由制表符分隔的列。

首先,我使用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作匹配模式时没有错误消息,也没有生成输出文件。有谁知道沉默行为的原因吗?

谢谢。

相关内容