【问题标题】:To redirect output to screen instead of csv file将输出重定向到屏幕而不是 csv 文件
【发布时间】:2014-03-30 18:01:03
【问题描述】:

我正在运行一个 shell 脚本,它从文件中读取一些列并将其写入 csv 文件。就像从两个文件中汇编的记录一样。

#!/bin/ksh

while read -r a1 a2 a3  && read -r b1 b2 b3  <&3; do
echo $a2 $a3 $b1 $b2
done <account_info.csv 3<Error.csv > output.csv
echo "extraction is done" 

现在在 output.csv 文件中编译完成后,我想在屏幕上打印消息“提取完成”。但是消息却打印在文件 output.csv 中。 ">" 运算符的输出的这种行为是否有任何原因。 请帮助将输出消息发送到屏幕。

【问题讨论】:

  • 没有理由将消息提取完成写入文件。这是你的完整脚本吗?
  • 你是如何运行脚本的。像这样 ? ./script.sh &gt; output.csv
  • test.ksh 是我正在运行的脚本的名称。我创建了一个 .ksh 文件并在腻子中运行它。它正在发生,我感到无助。
  • 您知道您正在从标准输入读取 a1、a2 和 a3 以及从 Error.csv 读取“b”值,对吗?使用“ksh”,您应该能够使用“read -u3”并避免重定向,并清楚地表明您知道自己在做什么。无论如何,看起来你已经重定向了脚本的标准输出,所以要么不要这样做,要么将 echo 重定向到 /dev/tty。

标签: shell unix csv while-loop echo


【解决方案1】:

此脚本有效:

#!/bin/ksh
IFS=','
while read -r a1 a2 a3 && read -r b1 b2 b3 <&3
do
  echo "${a2},${a3},${b1},${b2}"
done < a.csv  3< b.csv > output.csv
echo 'extraction is done'

测试文件:

$ cat a.csv
a1,a2,a3
$ cat b.csv
b1,b2,b3

运行:

$ ./test.ksh
extraction is done
$ cat output.csv
a2,a3,b1,b2

ksh:

$ ksh --version
version         sh (AT&T Research) 93u+ 2012-02-29

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2019-07-14
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2010-10-16
    相关资源
    最近更新 更多