脚本输出中只有一行

Shu*_*wal 4 command-line bash scripts

我的输入文件 ( SerialNos.csv)中有多行,如下所示:

4TF16B7GA129E
4TF16B7GA129S
4TF16B7GA129D
4TF16B7GA129X
Run Code Online (Sandbox Code Playgroud)

我想读取每一行,计算校验和,并将结果写入另一个文件,但我的输出文件Token.csv只有一个输出行。我如何处理每一行?

我的代码:

epoch=$(date -d "`date`" +"%s")
StringCsv="/home/Desktop/TokenGenScript/SerialNos.csv"
StringToken=b5242a2d7973c1aca3723c834ba0d239

while IFS=$'\n' read -r line || [ -n "$line" ]
do
 j=$line
 serial=${j}:${epoch}:${StringToken}
 echo "$serial"|sha256sum > Token.csv
done < "$StringCsv"
Run Code Online (Sandbox Code Playgroud)

Win*_*nix 6

您正在使用以下命令循环写入文件:

echo "$serial"|sha256sum > Token.csv
Run Code Online (Sandbox Code Playgroud)

但是,每次循环时,您都会擦除文件并写入新条目。您想要做的是每次使用此命令循环时追加(添加到)文件:

echo "$serial"|sha256sum >> Token.csv
Run Code Online (Sandbox Code Playgroud)

single>告诉 bash 擦除文件Token.csv并写入内容。double>>告诉 bash 添加到文件的末尾。


bash 脚本现在看起来像这样:

#!/bin/bash
epoch=$(date -d "`date`" +"%s")
StringCsv="/home/Desktop/TokenGenScript/SerialNos.csv"
StringToken=b5242a2d7973c1aca3723c834ba0d239

> Token.csv # Empty file from last run

while IFS=$'\n' read -r line || [ -n "$line" ]
do
 j=$line
 serial=${j}:${epoch}:${StringToken}
 echo "$serial"|sha256sum >> Token.csv # Append new record to end
done < "$StringCsv"
Run Code Online (Sandbox Code Playgroud)

有两种方法可以创建> Token.csv上面使用的新空文件和touch Token.csv. 但是只会> Token.csv清空现有文件。看:


Bar*_*mar 6

将输出重定向放在整个循环中,而不仅仅是sha256sum命令。每次重定向时,都是从头开始重新创建输出文件。这只会创建一次,并在循环中重复写入。

while IFS=$'\n' read -r line || [ -n "$line" ]
do
 j=$line
 serial=${j}:${epoch}:${StringToken}
 echo "$serial"|sha256sum
done < "$StringCsv" > Token.csv
Run Code Online (Sandbox Code Playgroud)