Linux C-Shell - AWK 上的 If 语句从 WC 通过管道传输

问题描述 投票:0回答:1

我有以下代码,它正在执行 wc -lc 命令,将其传输到 AWK 命令中,该命令打印文件大小(以 MB 为单位)及其内容内的行数。 如果文件“file.csv”存在,则效果很好,但如果不存在,目的是打印 0 0 但它只是打印错误消息“没有这样的文件或目录”,这里我什么也不做有代码:

wc -lc < "file.csv" | awk '{if($1) {FileSize = $2 / 1024 / 1024; RecordCount = $1 - 1; print FileSize, RecordCount} else{FileSize = 0; RecordCount = 0; print FileSize, RecordCount}}'

结果:

file.csv: No such file or directory.

它不会打印0 0,如果找不到文件,这就是我所期望的。

linux awk pipe wc
1个回答
0
投票

shell 在设置命令时会遵循重定向,因此如果找不到文件,shell 本身可以中止。

如果您不希望这样,请考虑:

(
  if test -e file.csv; then exec <file.csv; else exec </dev/null; fi
  wc -lc | awk '{if($1) {FileSize = $2 / 1024 / 1024; RecordCount = $1 - 1; print FileSize, RecordCount} else{FileSize = 0; RecordCount = 0; print FileSize, RecordCount}}'
)
© www.soinside.com 2019 - 2024. All rights reserved.