我有csv数据,如:
a,b,c,d,e,f,g,h
我希望这些数据在列表中,每行一个字母。有可能是shell脚本吗?我试图使用cut命令提取每个字母,如下所示:
less list.txt | cut -d"," -f?
该命令正在运行,但此处的问题是字段数未知。我必须将此命令放在循环中并迭代列表,以便我可以逐个提取值并将它们重定向到另一个文件。
答案 0 :(得分:11)
答案 1 :(得分:2)
是的,您可以使用cut
。关键点是--output-delimiter
的使用。如果将其设置为新行,则一切正常:
cut -d',' --output-delimiter=$'\n' -f1- file
还要注意两个事实:
-f1-
从第一个字段打印到最后一个字段。 n-
语法表示:从第n个字段到结尾。$'\n'
因为仅\n
会打印文字\n
而不是真正的新行。$ echo "a,b,c,d,e,f,g,h" | cut -d',' --output-delimiter=$'\n' -f1-
a
b
c
d
e
f
g
h
来自man cut
:
<强> - 输出定界符= STRING 强>
使用STRING作为输出分隔符,默认是使用输入 定界符
答案 2 :(得分:2)
您可以使用sed
:
sed "s/,/\n/g" list.txt
<强>输出强>
a
b
c
d
e
f
答案 3 :(得分:1)
您可以使用tr
命令将每个“,”转换为换行符。
cat list.txt | tr "," "\n"
从那时起,您可以使用while循环
在任意位置输出每一行cat list.txt | tr "," "\n" | while read LINE
do
echo "$LINE" >> ~/wherever/you/want
done
或......
while read LINE
do
echo "$LINE" >> ~/wherever/you/want
done <<< "$(cat list.txt | tr "," "\n")"
要么有效。