繁体   English   中英

用bash读取CSV文件中的特定列

[英]Reading a specific column in a CSV file with bash

我真的对bash / shell脚本没有经验。 我有大量文件需要跨服务器访问SCP。 我有一个文件列表,需要在具有三列的CSV文件中移动。 第二列称为file_name,其中包含文件的路径。

我需要读取文件的每一行,但仅处理第二列。 我在互联网上找到了类似的东西:

#!/bin/bash

csv_file=$1

while IFS=',' read -r file_name; do
    echo -e "File Name\t: $file_name"
done < $csv_file
IFS=$' \t\n'

但这似乎只是输出文件的所有3列。 任何指导将不胜感激,我真的对bash不太了解。

谢谢!

您需要为要读取的文件的每一列使用一个变量。 最后一个变量将获取所有剩余的列。 所以应该是:

while IFS=, read -r col1 file_name col3

如果输出在另一个singe文件中是可以接受的,那么他的声音听起来很适合awk ,这是一个用于逐行处理定界输入的程序。

例如,如果我正确理解以下内容,则可能会对您的问题有所帮助:

awk -F',' '{print "File Name:\t"$2}' inputfile > outputfile

-F','告诉awk文件中的字段分隔符是逗号。

print是awk的命令,用于输出输出,在这种情况下,字符串“ File Name:\\ t”后跟文件中的第二个字段,在awk中用$i表示,其中i是字段编号(NOT索引,awk为$0是整行)。

awk是一个非常强大的工具,这只是它可以执行的复杂处理的一个非常简单的示例-您可以在此处了解有关其功能的更多信息: http : //www.staff.science.uu.nl/~oostr102/ docs / nawk / nawk_toc.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM