我有一个两列的CSV列表(col1是Share Name,col2是文件系统路径)。我需要两个变量用于逗号之前的所有内容,或列之后的所有内容。我的问题是任何一列都可能有空格,即使输出中引用了这些空格,我的脚本也没有正确处理它们。
CSV:
共享名,/路径/到/共享名
“与空格共享”,/ path / to / sharewithspaces
ShareWithSpace,“/ path / to / share with spaces”
我使用这个awk语句获取字段1或字段2:
echo $line | awk -F "\"*,\"*" '{print $2}'
但是,我很快意识到它没有正确处理空间,即使将该命令传递给变量并引用变量也是如此。
所以,然后在搜索我的大脑后,我正在尝试这个:
echo $line | cut -d, -f2
哪个有效,在回显变量$ line时除外。如果我回显字符串,它可以很好地工作,但不幸的是我正在使用它/ read / do。
我相当肯定我的问题是必须定义字段并有空格,但我真的只需要在逗号之前或之后。
这是精简版本,因此没有敏感数据。
#!/usr/bin/bash
ssh <ip> <command> > "2_shares.txt"
<command> > "1_shares.txt"
file1="1_shares.txt"
file2="2_shares.txt"
while read -r line
do
share=`echo "$line" | awk -F "\"*,\"*" '{print $1}'`
path=`echo "$line" | awk -F "\"*,\"*" '{print $2}'`
if grep "$path" $file2 > /dev/null;
then
:
else
echo "SHARE NEEDS CREATED FOR $line"
case $path in
*)
blah blah blah
;;
esac
fi
done < "$file1"
答案 0 :(得分:2)
你可以这样做,
awk -F',' '{print $2}' file
跳过第一行。
awk -F',' 'NR>1{print $2}' file
答案 1 :(得分:0)
您的问题只是您没有引用shell变量。总是引用shell变量,除非你有一个非常具体的理由不完全了解所有后果。
我强烈怀疑你的脚本的其余部分在它的方法中是完全错误的,因为你显然不知道引用变量并且正在讨论shell循环并且一次回应一行到awk因此请发布一个后续问题如果你我喜欢帮助。