awk 打印在 bash shell 脚本中不起作用
Awk print is not working inside bash shell script
当我在 shell 之外使用 AWK 打印命令时,它运行良好。以下是逗号分隔的文件 (sample.txt) 的内容。
IROG,1245,OUTO,OTUG,USUK
之后,在 shell 之外执行以下命令,我得到 IROG
作为输出。
cat sample.txt | awk -F, '{print }' > data.txt
下面是 shell 脚本
my $HOME ='home/tmp/stephen';
my $DATA ="$HOME/data.txt";
my $SAMPLE ="$HOME/sample.txt";
`cat $SAMPLE | awk -F, '{print }' > $DATA`;
但在这里我得到的内容与原始文件中的内容相同,而不是第一列。
输出为IROG,1245,OUTO,OTUG,USUK
但我预计只有 IROG
。有人可以告诉我哪里错了吗?
你的反引号表达式中的 </code> 在被 shell 执行之前被 perl 扩展。大概它没有任何价值,所以您的 awk 命令只是 <code>{print }
,它会打印整个记录。您应该转义 $
以防止这种情况发生:
`awk -F, '{print $1}' "$SAMPLE" > "$DATA"`;
请注意,我已经引用了您的变量并删除了您对 cat
的无用使用。
如果您打算使用 shell 脚本,而不是 perl 脚本(这是您目前拥有的脚本),您可以这样做:
home=home/tmp/stephen
data="$home/data.txt"
sample="$home/sample.txt"
awk -F, '{print }' "$sample" > "$data"
在shell中,变量赋值不能有space。此外,使用大写变量名被认为是不好的做法,因为您可能会覆盖 shell 内部使用的变量名。此外,在变量扩展周围使用双引号以防止与分词和 glob 扩展相关的问题被认为是一种很好的做法。
有几种方法可以让您 trim 从您的第一个字段中领先的白人 space。一种是使用 sub
删除它:
awk -F, '{sub(/^ */, ""); print }'
这将从行首删除所有 space 个字符。同样,如果在 perl 中的反引号内执行此操作,请记住转义 $
。
当我在 shell 之外使用 AWK 打印命令时,它运行良好。以下是逗号分隔的文件 (sample.txt) 的内容。
IROG,1245,OUTO,OTUG,USUK
之后,在 shell 之外执行以下命令,我得到 IROG
作为输出。
cat sample.txt | awk -F, '{print }' > data.txt
下面是 shell 脚本
my $HOME ='home/tmp/stephen';
my $DATA ="$HOME/data.txt";
my $SAMPLE ="$HOME/sample.txt";
`cat $SAMPLE | awk -F, '{print }' > $DATA`;
但在这里我得到的内容与原始文件中的内容相同,而不是第一列。
输出为IROG,1245,OUTO,OTUG,USUK
但我预计只有 IROG
。有人可以告诉我哪里错了吗?
你的反引号表达式中的 </code> 在被 shell 执行之前被 perl 扩展。大概它没有任何价值,所以您的 awk 命令只是 <code>{print }
,它会打印整个记录。您应该转义 $
以防止这种情况发生:
`awk -F, '{print $1}' "$SAMPLE" > "$DATA"`;
请注意,我已经引用了您的变量并删除了您对 cat
的无用使用。
如果您打算使用 shell 脚本,而不是 perl 脚本(这是您目前拥有的脚本),您可以这样做:
home=home/tmp/stephen
data="$home/data.txt"
sample="$home/sample.txt"
awk -F, '{print }' "$sample" > "$data"
在shell中,变量赋值不能有space。此外,使用大写变量名被认为是不好的做法,因为您可能会覆盖 shell 内部使用的变量名。此外,在变量扩展周围使用双引号以防止与分词和 glob 扩展相关的问题被认为是一种很好的做法。
有几种方法可以让您 trim 从您的第一个字段中领先的白人 space。一种是使用 sub
删除它:
awk -F, '{sub(/^ */, ""); print }'
这将从行首删除所有 space 个字符。同样,如果在 perl 中的反引号内执行此操作,请记住转义 $
。