我试图卷曲一个csv文件并根据它们的属性对其进行解析,然后使用变量名将其打印回来。
文件1:
10.0.0.1,gateway,name_of_device
10.2.4.5,server,name_of_device
10.3.5.6,PC,name_of_device
我的脚本,
#!/bin/sh
input=$(curl http://example.com/1.txt)
ip=$(echo "$input" | awk -F ',' '{print $1}')
type=$(echo "$input" | awk -F ',' '{print $2}')
name=$(echo "$input" | awk -F ',' '{print $3}')
echo "$ip $type $name"
打印,
10.0.0.1
10.2.4.5
10.3.5.6
gateway
server
PC
name_of_device
name_of_device
name_of_device
但预期的输出应该是,
10.0.0.1 gateway name_of_device
10.2.4.5 server name_of_device
10.3.5.6 PC name_of_device
尝试了不同的选项,例如
将输出分配给另一个变量并回显它,
# output="$source_ip $tag_text"
# echo -e $output
printf语句:
# printf "%-20s | %-20s" "$source_ip" "$tag_text"
# printf "$source_ip" "$tag_text"
答案 0 :(得分:2)
只需将输入字段分隔符设置为逗号,然后让awk
处理其余内容:
$ awk -F, '$1=$1' file
10.0.0.1 gateway name_of_device
10.2.4.5 server name_of_device
10.3.5.6 PC name_of_device
通过说$1=$1
,awk
重新计算字段并设置OFS
四周,这使得所有逗号(FS)都替换为空格(OFS)。
答案 1 :(得分:1)
awk肯定是使用它的正确工具,但您也可以这样做:
curl http://example.com/1.txt |
while IFS=, read ip type name rest; do
echo $ip $type $name
done
变量将在while循环结束后失去它们的值,因为它位于子shell中。