无法使用bash将管道传输到另一个目录?
我试图使用awk将许多列的数据简化为单个的数据列,从输入目录到输出。但是,使用下面附带的代码,我得到以下错误:“OUTPUT/:是一个目录”无法使用bash将管道传输到另一个目录?,bash,awk,Bash,Awk,我试图使用awk将许多列的数据简化为单个的数据列,从输入目录到输出。但是,使用下面附带的代码,我得到以下错误:“OUTPUT/:是一个目录” 谢谢 您可以,只是您必须在括号内指明$f,而不是将其视为变量f_1c: awk '{ print $3 }' $f > $OUTPUT/${f}_1c ^^^^ 正如你在评论中所说: 但是,这会将整个路径添加到${f}\u 1c和bash中的文件名 给出一个错误 然后我们只需要得到文件
谢谢 您可以,只是您必须在括号内指明
$f
,而不是将其视为变量f_1c
:
awk '{ print $3 }' $f > $OUTPUT/${f}_1c
^^^^
正如你在评论中所说:
但是,这会将整个路径添加到${f}\u 1c和bash中的文件名
给出一个错误
然后我们只需要得到文件名。这可以通过basename
完成:
file_name=$(basename "$f")
awk '{ print $3 }' $f > $OUTPUT/${file_name}_1c
总而言之:
#!/bin/bash
FILES=/INPUT/*
OUTPUT=/OUTPUT
for f in $FILES
do
file_name=$(basename "$f")
awk '{ print $3 }' $f > $OUTPUT/${file_name}_1c
done
您只需在括号内指明
$f
,而不必将其视为变量f1c
:
awk '{ print $3 }' $f > $OUTPUT/${f}_1c
^^^^
正如你在评论中所说:
但是,这会将整个路径添加到${f}\u 1c和bash中的文件名
给出一个错误
然后我们只需要得到文件名。这可以通过basename
完成:
file_name=$(basename "$f")
awk '{ print $3 }' $f > $OUTPUT/${file_name}_1c
总而言之:
#!/bin/bash
FILES=/INPUT/*
OUTPUT=/OUTPUT
for f in $FILES
do
file_name=$(basename "$f")
awk '{ print $3 }' $f > $OUTPUT/${file_name}_1c
done
我明白了。但是,这会将整个路径添加到${f}\u 1c中的文件名,bash会给出一个错误:-bash:/OUTPUT//INPUT/mubunching-100302.0250.001\u 1c:没有这样的文件或directory@StarStrides然后您应该使用
file\u name=$(basename“$f”)
然后使用awk'{print$3}'$f>$OUTPUT/${file\u name}\u 1c
我看到的东西。但是,这会将整个路径添加到${f}\u 1c中的文件名,bash会给出一个错误:-bash:/OUTPUT//INPUT/mubunching-100302.0250.001\u 1c:没有这样的文件或directory@StarStrides然后应该使用file\u name=$(basename“$f”)
,然后使用awk'{print$3}'$f>$OUTPUT/${file\u name}\u 1c