我希望如果有人能帮我,
如何将for循环的输出打印到单行?
for i in `cat file.csv`
do
echo $i
done我在这里尝试实现的是从file.csv获取一个数字列表,以生成一条mysql批量删除语句。
delete FROM Recordtable WHERE DataID IN ('93041', '93031' ...etc);这里的目标是将每1000条记录加载到一条delete语句中
非常感谢您的帮助
发布于 2012-02-29 06:12:58
如果你想要循环,你可以使用
for i in ($<file.csv)
do
echo -n "$i "
doneecho的-n选项会取消换行符。
您可以使用echo $(<file.csv)在一行中打印整个文件。
但这可能更适合您的需求:
awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file这将打印每一行,后跟一个空格。只要行号可以被1000整除,它就会打印一个换行符;也就是说,在每1000行之后。
添加:要打印括号中的每一行,您可以使用
awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file | sed 's/.*/(&)/'sed命令搜索任何字符(.*),并将它们替换为open-paren、找到的字符(即整行)和close-paren。
发布于 2012-02-29 06:32:05
看起来file.csv在单个列中包含了DataID。如果这是真的,您可以像这样生成查询,
echo delete FROM Recordtable WHERE DataID IN \(0$(cat file.csv | tr -cs '[:digit:]' ',')0\)\;因为文件只包含整数(DataID看起来是整数),所以没有必要用单引号将它括起来。
$ cat data
123
241114
43243
35745
656
346 456
$echo delete FROM Recordtable WHERE DataID IN \(0$(cat data | tr -cs '[:digit:]' ',')0\)\;
delete FROM Recordtable WHERE DataID IN (0,123,241114,43243,35745,656,346,456,0);在这里,0处理领先和落后的,。
发布于 2012-02-29 06:19:05
您可以执行以下操作:
echo $(cat file.csv)或
cat file.csv | xargs或者最后:
$ cat /tmp/l.csv
1;2;3;4;5;6
7;8;9;10;11
$ echo $(< /tmp/l.csv)
1;2;3;4;5;6 7;8;9;10;11
$ echo $(cat /tmp/l.csv) | perl -pe 's@(;|\n)@,@g'
1,2,3,4,5,6,7,8,9,10,11,
$ https://stackoverflow.com/questions/9490573
复制相似问题