linux - 在 Shell 脚本中读取 CSV 文件,直到没有标题的行尾

标签 linux shell unix awk

我有一个名为“readfile.csv”的文件,其中包含以下内容。

Name    Id        VAl       Number    IP
James,007,$500,111-111-111,111-000-000
Bond,700,$900,100-000-999, 666-999-000

此处 Name、Id、Val、Number 和 IP 是 csv 文件中的标题,第二行即 FirstVal、SecondVal 等是这些标题的值。我只想读取值而不是标题并将其显示在控制台中。我该怎么做?而且我还想读取值直到行尾/文件末尾,因为我不知道文件中可以存在多少列。它可以是 5 或 6 列。

现在我可以在 shell 脚本中读取没有标题的单行,如下所示。但这对我这里提到的情况没有帮助。

#!/bin/bash

val1=( $(cut -d ',' -f1 readfile.csv ) )
printf "%s\n" "${val1[0]}"
val2=( $(cut -d ',' -f2 readfile.csv ) )
printf "%s\n" "${val2[0]}"
val3=( $(cut -d ',' -f3 readfile.csv ) )
printf "%s\n" "${val3[0]}"

我实际上想将这些值附加到其他脚本。例如,我有一个名为 runfile.sh 的脚本,它附加来自 awk 的值并通过 http 打开一个文件位置。

例如,'runfile.sh' 正在存储这个值:

'https://my_win_loc/personinfo'

现在 runfile 将读取 csv 文件并将每个值附加到此 url,如下所示:

'https://my_win_loc/personinfo/James'
'https://my_win_loc/personinfo/Bond'

请帮我解决这个问题。提前致谢。

最佳答案

通常,这类事情是通过 awk 或简单的 read 循环完成的。

#!/bin/bash

exec < readfile.csv || exit 1
read header # read (and ignore) the first line
while IFS=, read name id val number ip; do
    echo name = "$name"
    echo id = "$id"
    echo val = "$val"
    echo number = "$number"
    test -n "$ip" && echo ip = "$ip"
done

关于linux - 在 Shell 脚本中读取 CSV 文件,直到没有标题的行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976841/

相关文章:

linux - SLES 12 语法错误 : '=~' unexpected operator/operand

c - 为什么 vfork 会产生这个输出?

unix - 如何在没有回车的情况下显示日志文件的 rsync 进度?

c - 无法创建共享内存C

c - 脚本和 C 二进制程序之间的竞争条件

c++ - Makefile 编译内核模块以包含树源文件

php - 在 PHP 上实时执行 git 命令

macos - 如何让shell脚本等待pkg完成安装

linux - 使用 bash 脚本读取数字

bash - 此处文档 - 意外的文件结尾