【问题标题】:Shell script to read and update a csv file用于读取和更新 csv 文件的 Shell 脚本
【发布时间】:2013-08-28 20:58:15
【问题描述】:

在使用 Shell 脚本读取和更新 csv 文件时,我需要一些帮助。我已经编写了下面的代码来读取 csv 文件,它工作正常。

#!/bin/sh
#This script is to read the excel data
IFS=","
echo "Starting to read csv"
i=1
while read f1 f2
do
    test $i -eq 1 && ((i=i+1)) && continue
    echo "tenantID is :$f1"
    echo "status is   :$f2"

#The below command will update the schema with data

java -Xmx512m -XX:MaxPermSize=128m -jar biz.jar -install -readers=seed -          delegator=default#$f1

done < TenantId.csv

echo "end of file "

上面的代码工作正常。即它读取csv文件并将tenantID传递给java arg。一旦 java 处理完成,我想用一些值更新状态(f2)。同样在上面的代码中,空行也被执行。我想知道如何只处理存在数据的行。请让我知道如何实现同样的目标。

提前致谢

【问题讨论】:

    标签: shell unix


    【解决方案1】:
    while read f1 f2
    do
        test $i -eq 1 && ((i=i+1)) && continue
        [ -z "$f1" ] && continue
        echo "tenantID is :$f1"
        echo "status is   :$f2"
    
        #The below command will update the schema with data
    
        java -Xmx512m -XX:MaxPermSize=128m -jar biz.jar -install -readers=seed -          delegator=default#$f1
    
        echo $f1, XXX >> TenantIdOut.csv
    done < TenantId.csv
    

    添加了两行代码:

    1. 如果 f1 为空,继续 - 这是跳过空白行。
    2. 将记录 f1 和新状态写入一个新文件,在循环之外,您可以使用这个新文件重命名输入文件。

    【讨论】:

    • 您好大师,非常感谢您提供的信息。在第二行中,我想更新同一个 TenantID.csv 文件并且不想写入不同的文件。另外我只想更新系统当前正在处理的行的状态(f2)。
    • 在while循环中,你不能更新输入文件。你可以写入一个临时文件,在while循环之后,你可以用输入文件重命名你的临时文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多